我在scala上使用spark。我在Rdd中有一些空行。我需要将它们从Rdd中删除。
我试过它:
val valfilteredRow = rddRow.filter(row => row!=null && row.length>0)
但它没有用。
Rdd中的行看起来像[with:valfilteredRow.collect()。foreach(println)]:
[,AAGGOO]
[,AAAOOO]
[,GGGGGII]
[]
[,UGGG]
假设您有以下顺序:
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
这是我在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']]
你可以看到第二个元素是空的,所以我们将通过计算元素的长度来过滤它,元素的长度应该大于1。
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']]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。