spark.sql.Column
предоставляет метод like
, но теперь (Spark 1.6.0 / 2.0.0) он работает только со строковыми литералами. Тем не менее вы можете использовать необработанный SQL:
import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc) // Make sure you use HiveContext
import sqlContext.implicits._ // Optional, just to be able to use toDF
val df = Seq(("foo", "bar"), ("foobar", "foo"), ("foobar", "bar")).toDF("a", "b")
df.registerTempTable("df")
sqlContext.sql("SELECT * FROM df WHERE a LIKE CONCAT('%', b, '%')")
// +------+---+
// | a| b|
// +------+---+
// |foobar|foo|
// |foobar|bar|
// +------+---+
или expr
/ selectExpr
:
df.selectExpr("a like CONCAT('%', b, '%')")
В Spark 1.5 для этого потребуется HiveContext
. Если по какой-либо причине контекст Hive не является вариантом, вы можете использовать пользовательский udf
:
import org.apache.spark.sql.functions.udf
val simple_like = udf((s: String, p: String) => s.contains(p))
df.where(simple_like($"a", $"b"))
val regex_like = udf((s: String, p: String) =>
new scala.util.matching.Regex(p).findFirstIn(s).nonEmpty)
df.where(regex_like($"a", $"b"))
Короткий ответ, то, потому что стандарт C++ требует main()
возвращаться int
.
, Поскольку Вы, вероятно, знаете, возвращаемое значение от эти main()
, функция используется библиотекой времени выполнения в качестве кода выхода для процесса. И Unix и Win32 поддерживают понятие (маленького) целого числа, возвращенного из процесса после того, как это закончилось. Возврат значения от main()
обеспечивает один способ для программиста определить это значение.
Большинство Операционных систем сообщает пользователю или обработке вызовов, если приложение было успешно или нет. Это особенно полезно в сценариях, где сценарий может условно перейти (если тогда) на результатах программы. Что-то вроде:
// pseudo-code
screenscrape http://mydatasource.com > results.txt
if errorlevel == 0 then
processfile results.txt
else
echo Screen Scraping Failed!
end if
Это состояние результата сделано через возвращаемое значение основного.
, В то время как некоторые компиляторы допускают пусто основной ради непротиворечивости и простоты, стандарт ANSI требует одного единственного прототипа основного:
int main(int argc, char *argv[]);
, поскольку в C, аргументы очищены вызывающей стороной, автор основного может забыть объявлять или обрабатывать аргументы argc & argv. Однако, если стандартные программы установки, которые называют основными, ожидают международное возвращаемое значение, и вместо этого не находят один, поведение может неопределенный.
Короткий ответ:
Из Википедии:
значение, возвращенное из основной функции, становится статусом выхода процесса, хотя стандарт C только приписывает определенное значение двум значениям:
EXIT_SUCCESS
(традиционно нулевой) иEXIT_FAILURE
. Значение других возможных возвращаемых значений определяется реализацией.
Как в C, потому что процесс даст ОС код выхода.
можно или использовать
int main (int argc, char ** argv)
{
return (0);
}
, или
int main (int argc, char ** argv)
{
exit (0);
}
Это находится, по крайней мере, в C89 IIRC.
Поскольку интервал является кодом возврата, программа может возвратиться к ОС.
можно запросить это значение, чтобы проверить, была ли операция succesfull.
Это было чрезвычайно полезно при использовании сценариев командной строки.
Возможно, потому что имеет смысл чисто выходить с кодом статуса от main()
метод. В Java мы должны эмулировать это использование System.exit()
, который не является всем этим корректным.