Spark, Scala: Как удалить пустые строки из Rdd или из dataframe? - PullRequest
0 голосов
/ 13 декабря 2018

Я использую искру на scala. И у меня есть несколько пустых строк в Rdd.Мне нужно удалить их из Rdd.

И я попробовал это так:

val valfilteredRow = rddRow.filter(row => row!=null && row.length>0)

Однако это не сработало.

Строки в Rdd выглядят как [with: valfilteredRow.collect (). Foreach (println)]:

[,AAGGOO]
[,AAAOOO]
[,GGGGGII]
[]
[,UGGG]

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Если ваш RDD имеет тип RDD[String], то вы можете сделать как

rdd.filter(_.length>0).collect
0 голосов
/ 18 декабря 2018

Я не знаю Scala, но вот что я сделал в Pyspark:

Предположим, у вас есть входной файл, например:

Banana,23,Male,5,11,2017

Dragon,28,Male,1,11,2017
Dragon,28,Male,1,11,2017

2-я строка пуста.

rdd = sc.textFile(PATH_TO_FILE).mapPartitions(lambda line: csv.reader(line,delimiter=','))

>>> rdd.take(10)
[['Banana', '23', 'Male', '5', '11', '2017'], [], ['Dragon', '28', 'Male', '1', '11', '2017'], ['Dragon', '28', 'Male', '1', '11', '2017']]

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

>>> rdd = sc.textFile(PATH_TO_FILE).mapPartitions(lambda line: csv.reader(line,delimiter=',')).filter(lambda line: len(line) > 1)
>>> rdd.take(10)
[['Banana', '23', 'Male', '5', '11', '2017'], ['Dragon', '28', 'Male', '1', '11', '2017'], ['Dragon', '28', 'Male', '1', '11', '2017']]
0 голосов
/ 14 декабря 2018

Предположим, у вас есть следующая последовательность:

val seq = Seq(
  ",AAGGOO",
  ",AAAOOO",
  ",GGGGGII",
  "",
  ",UGGG"
)

С DF

  val df = seq.toDF("Column_name")

  df.show(false)

+--------------+
|Column_name   |
+--------------+
|,AAGGOO       |
|,AAAOOO       |
|,GGGGGII      |
|              |
|,UGGG         |
+--------------+

  df.filter(row => !(row.mkString("").isEmpty && row.length>0)).show(false)

+--------------+
|Column_name   |
+--------------+
|,AAGGOO       |
|,AAAOOO       |
|,GGGGGII      |
|,UGGG         |
+--------------+

С rdd

  val rdd = sc.parallelize(seq)

  val filteredRdd = rdd.filter(row => !row.isEmpty)

  filteredRdd.foreach(println)

,AAGGOO
,AAAOOO
,GGGGGII
,UGGG
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...