开发者社区> 问答> 正文

Spark,Scala:如何从Rdd或dataframe中删除空行?

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

我试过它:

val valfilteredRow = rddRow.filter(row => row!=null && row.length>0)
但它没有用。

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

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

展开
收起
社区小助手 2018-12-21 11:56:23 13225 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    假设您有以下顺序:

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

    2019-07-17 23:23:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载