Scala / Spark — выбрать один столбец из RDD (массив [строка])

#scala #apache-spark

#scala #apache-spark

Вопрос:

Мои входные данные — это RDD[Array[String]] тип, значения примерно такие:

 ["hello1", "world1", "test1", "Awww  that's bad."]
["hello2", "world2", "test2", "This is another test. I can't make it"]
["hello3", "world3", "test3", "no  it's not behaving at all. i'm mad."]
["hello4", "world4", "test4", "I need a  hug"]
  

Мне нужен последний столбец, поэтому я так и сделал inputdata.map(f => f(3)) . Как ни странно, я могу получить ожидаемый RDD[String] результат для некоторых строк, но для некоторых он усечен.

Вот так:

 "Awww"
"This is another test. I can't make it"
"no"
"I need a  hug"
  

Что случилось с моими 1-й и 3-й строками?

Редактировать:

Чтобы добавить, я печатал выходные данные, используя это:

 output.take(4).foreach(println)
  

Комментарии:

1. Можете ли вы показать функцию предиката f ?

2. @AmitPrasad Да? Извините, это лямбда-экспресс. f может быть любая буква … f(3) означает взятие элемента с индексом = 3 из массива.

3. ах, извините, что я не видел RDD[Array[String]] ваш тип ввода

4. Я не нахожу ничего неправильного в вашем заявлении о печати

5. inputdata.map(f => f(3)).collect или output.take(4).foreach(println) оба дают ожидаемый результат.

Ответ №1:

введите описание изображения здесь

В приведенном выше примере вы можете использовать сбор или даже распечатать его, чтобы получить правильный результат.

Редактировать:

После добавления запятой внутри "

введите описание изображения здесь

Комментарии:

1. Возможно, я нашел причину. Не могли бы вы повторить попытку, поставив , (запятую) после «Awww»?

2. Я предполагаю, что проблема связана с запятой в моих исходных данных.