首页 > 解决方案 > Spark,Scala:如何从 Rdd 或数据框中删除空行?

问题描述

我在 scala 上使用 spark。我在 Rdd 中有一些空行。我需要将它们从 Rdd 中删除。

我试了一下:

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

然而它没有用。

Rdd 中的行看起来像 [ with : valfilteredRow.collect().foreach(println) ]:

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

标签: scalaapache-sparkapache-spark-sql

解决方案


我不了解 Scala,但这是我在 Pyspark 中所做的:

假设您有一个输入文件,例如:

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=','))

>>> 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']]

推荐阅读