Почему мы должны использовать `int main`, а не` void main` в C ++? [Дубликат]

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"))
30
задан the Tin Man 24 September 2012 в 18:56
поделиться

6 ответов

Короткий ответ, то, потому что стандарт C++ требует main() возвращаться int.

, Поскольку Вы, вероятно, знаете, возвращаемое значение от эти main(), функция используется библиотекой времени выполнения в качестве кода выхода для процесса. И Unix и Win32 поддерживают понятие (маленького) целого числа, возвращенного из процесса после того, как это закончилось. Возврат значения от main() обеспечивает один способ для программиста определить это значение.

30
ответ дан jmq 24 September 2012 в 18:56
поделиться
  • 1
    Нет, Вы не можете..., который изменит сессию самого процесса, если что you' ре после уничтожает только детей это isn' t, что Вы хотите – berdario 22 March 2014 в 21:55

Большинство Операционных систем сообщает пользователю или обработке вызовов, если приложение было успешно или нет. Это особенно полезно в сценариях, где сценарий может условно перейти (если тогда) на результатах программы. Что-то вроде:

// 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. Однако, если стандартные программы установки, которые называют основными, ожидают международное возвращаемое значение, и вместо этого не находят один, поведение может неопределенный.

Короткий ответ:

  • возвращаемое значение основного полезно для сценариев.
  • установка и стандартные программы очистки, которые вызывают основную потребность последовательный интерфейс для использования.
15
ответ дан jmq 24 September 2012 в 18:56
поделиться
  • 1
    I' ve читают вопрос, Вы прочитали мой ответ? Я явно записал, что мне было нужно маленькое изменение этой проблемы..., если Вы гуглите для " подобработайте выходят из children" это будет первым результатом you' ll находят. На самом деле способность уничтожить детей без выхода является более общей проблемой, чем простое выполнение его при выходе, таким образом это будет полезно для других людей, натыкающихся на ту же проблему. – berdario 23 March 2014 в 14:06

Из Википедии:

значение, возвращенное из основной функции, становится статусом выхода процесса, хотя стандарт C только приписывает определенное значение двум значениям: EXIT_SUCCESS (традиционно нулевой) и EXIT_FAILURE. Значение других возможных возвращаемых значений определяется реализацией.

1
ответ дан Azeem 24 September 2012 в 18:56
поделиться

Как в C, потому что процесс даст ОС код выхода.

можно или использовать

int main (int argc, char ** argv)
{
  return (0);
}

, или

int main (int argc, char ** argv)
{
  exit (0);
}

Это находится, по крайней мере, в C89 IIRC.

0
ответ дан Keltia 24 September 2012 в 18:56
поделиться

Поскольку интервал является кодом возврата, программа может возвратиться к ОС.

можно запросить это значение, чтобы проверить, была ли операция succesfull.

Это было чрезвычайно полезно при использовании сценариев командной строки.

0
ответ дан Toon Krijthe 24 September 2012 в 18:56
поделиться

Возможно, потому что имеет смысл чисто выходить с кодом статуса от main() метод. В Java мы должны эмулировать это использование System.exit(), который не является всем этим корректным.

0
ответ дан Azeem 24 September 2012 в 18:56
поделиться
  • 1
    Да. Я также часто пропускаю " duplicate/clone" опция;-) – eventhorizon 25 November 2017 в 08:48
Другие вопросы по тегам:

Похожие вопросы: