【问题标题】:RDD subtract dosen't work for user defined types [duplicate]RDD 减法不适用于用户定义的类型 [重复]
【发布时间】:2017-06-05 07:30:46
【问题描述】:

我试过这个简单的例子

 scala> rdd2.collect
    res45: Array[Person] = Array(Person(Mary,28,New York), Person(Bill,17,Philadelphia), Person(Craig,34,Philadelphia), Person(Leah,26,Rochester))

    scala> rdd3.collect
    res44: Array[Person] = Array(Person(Mary,28,New York), Person(Bill,17,Philadelphia), Person(Craig,35,Philadelphia), Person(Leah,26,Rochester))

    scala> rdd2.subtract(rdd3).collect
    res46: Array[Person] = Array(Person(Mary,28,New York), Person(Leah,26,Rochester), Person(Bill,17,Philadelphia), Person(Craig,34,Philadelphia))

我希望 rdd2.subtract(rdd3).collect 只应该是 Person(Craig,34,Philadelphia) 但我的输出是 rdd2 有人可以解释一下吗?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    这是 scala REPL 的已知问题之一,其中相等条件在 REPL 中无法正常工作。尝试以下方法来修复它。此问题仅发生在 REPL 中,并且在您通过 spark-submit 运行他的应用程序时会消失。 这个问题在这个ticket中有详细的解释。

    scala> :paste -raw  // make sure you are using Scala 2.11 for the raw option to work.
    // Entering paste mode (ctrl-D to finish)
    
    package mytest;
    case class Person(name: String, age: Int, city: String);
    
    // Exiting paste mode, now interpreting.
    
    scala> import mytest.Person
    
    scala> val rdd2 = sc.parallelize(Seq(Person("Mary",28,"New York"), Person("Bill",17,"Philadelphia"), Person("Craig",34,"Philadelphia"), Person("Leah",26,"Rochester")))
    rdd2: org.apache.spark.rdd.RDD[mytest.Person] = ParallelCollectionRDD[6] at parallelize at <console>:25
    
    
    scala> val rdd3 = sc.parallelize(Seq(Person("Mary",28,"New York"), Person("Bill",17,"Philadelphia"), Person("Craig",35,"Philadelphia"), Person("Leah",26,"Rochester")))
    rdd3: org.apache.spark.rdd.RDD[mytest.Person] = ParallelCollectionRDD[7] at parallelize at <console>:25
    
    scala> rdd2.subtract(rdd3).collect
    res1: Array[mytest.Person] = Array(Person(Craig,34,Philadelphia))
    

    【讨论】:

    • 感谢您的回答,在我的情况下效果很好。但是粘贴模式如何解决问题呢?
    • 解决方案要求案例类在一个包下(示例中为 mytest)。为了实现这一点,我们需要粘贴模式。带有原始选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2013-08-24
    • 2022-07-04
    • 2016-03-09
    • 2021-09-07
    • 2020-08-09
    相关资源
    最近更新 更多