Можем ли мы предоставить нашу собственную функцию в качестве условия соединения для RDD или Dataframes в Spark? [Дубликат]

Наверное, я очень опаздываю на вечеринку.

Как уже говорилось ранее, вызов input.nextLine() после получения вашего значения int решит вашу проблему. Причина, по которой ваш код не работал, заключается в том, что с вашего ввода (куда вы ввели int) ничего не оставалось хранить в string1.

Рассмотрим nextLine () как нечетный среди методов nextFoo () в классе Scanner. Давайте возьмем быстрый пример. Скажем, у нас есть две строки кода, подобные приведенным ниже:

int firstNumber = input.nextInt();
int secondNumber = input.nextInt();

Если мы вводим значение ниже (как одну строку ввода)

54 234

Значение нашей переменной firstNumber и secondNumber становится 54 и 234 соответственно. Причина, по которой это работает, заключается в том, что новый канал ( i.e\n ) НЕ НЕ автоматически генерируется, когда метод nextInt () принимает значения. Он просто берет «следующий int» и движется дальше. Это то же самое для остальных методов nextFoo (), за исключением nextLine ().

nextLine () генерирует новый фид строки сразу после принятия значения; это то, что означает @RohitJain, говоря, что новый канал «потребляется».

Наконец, метод next () просто берет ближайшую строку без создания новой строки; это делает это предпочтительным методом для взятия отдельных строк в одной и той же строке.

Надеюсь, это поможет ... Веселая кодировка!

1
задан zero323 5 October 2015 в 16:14
поделиться

1 ответ

Почему использование UDF приводит к декартовому продукту вместо полного внешнего соединения?

Причина, по которой использование UDF требует декартового произведения, довольно проста. Поскольку вы передаете произвольную функцию с возможно бесконечным доменом и не детерминированным поведением, единственным способом определить его значение является передача аргументов и оценка. Это означает, что вам просто нужно проверить все возможные пары.

Простое равенство, с другой стороны, имеет предсказуемое поведение. Если вы используете условие t1.foo = t2.bar, вы можете просто перетасовать t1 и t2 строки с помощью foo и bar соответственно, чтобы получить ожидаемый результат.

И, если быть точным, в реляционной алгебре внешний соединение фактически выражается с помощью естественного соединения. Все, что за этим стоит, - это просто оптимизация.

Любой способ заставить внешнее объединение над декартовым произведением

На самом деле, если вы не хотите модифицировать движок Spark SQL.

6
ответ дан zero323 25 August 2018 в 18:49
поделиться
Другие вопросы по тегам:

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