【问题标题】:"Item does not take parameters" when filtering RDD - scala, Apache Spark过滤RDD时“项目不带参数” - scala,Apache Spark
【发布时间】:2018-07-09 10:48:09
【问题描述】:

我正在使用 Apache Spark 中的 csv 文件。我创建了RDD,我想获得每个月单独的RDD,所以我按日期过滤,表示为201601、201602等...

case class Item(date: String, id: String, classification: String, description: String, algoIndex: String, stratumIndex: String, itemIndex: String, allGmIndex: String, gmRaIndex: String, coicopWeight: String, itemWeight: String, cpihCoicopWeight: String)

val quarter1 = sc.textFile ("examples/Q1.csv")

val q1 = quarter1 map {i => {
        val x = i.split(",")
        Item(x(0), x(1), x(2), x(3), x(4), x(5), x(6), x(7), x(8), x(9), x(10), x(11))
        }
    }

val Jan = q1.filter {x=> x(0) == "201601"}
val Feb = q1.filter {x=> x(0) == "201602"}
val Mar = q1.filter {x=> x(0) == "201603"}

最后三行导致错误“Item does not take parameters”,与以下位有关:

{x=> x(0) == ..}

我该如何解决这个问题?我在课堂上做错了什么? 非常感谢您! :)

【问题讨论】:

    标签: scala apache-spark filter parameters rdd


    【解决方案1】:

    您使用案例类,因此您不能使用apply 语法。使用您定义的名称:

    q1.filter { x => x.date == "201601" }
    

    q1.filter { _.date == "201601" }
    

    【讨论】:

    • 非常感谢! :)
    • 虽然没有apply,但也可以使用case-classes:q1.filter {x => x.productElement(0) == "201601"}
    【解决方案2】:

    函数文字中的xs 是Item 类型。 Item 没有 apply(i: Int) 方法。 相反,Item 有一堆命名成员变量。

    试试这样的方法:

    val Jan = q1.filter {x => x.date == "201601"}
    

    可以简写为:

    val Jan = q1.filter (_.date == "201601")
    

    【讨论】:

    • 非常感谢! :)
    猜你喜欢
    • 2015-06-15
    • 2015-06-27
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2015-07-05
    相关资源
    最近更新 更多