【问题标题】:How to construct a function that can be used for mapping a JavaRDD[org.apache.spark.sql.Row] in spark/scala?如何构造一个可用于在 spark/scala 中映射 JavaRDD[org.apache.spark.sql.Row] 的函数?
【发布时间】:2017-06-24 05:36:56
【问题描述】:
val drdd = Seq(("a", 1), ("b", 2), ("a", 3)).toDF("name", "value").toJavaRDD
drdd.map{ (row: Row) => row.get(0) }

我传递的匿名函数似乎是 Row => 任何时候它都在期待 org.apache.spark.api.java.function.Function[org.apache.spark.sql.Row,?]

<console>:35: error: type mismatch;
found   : org.apache.spark.sql.Row => Any
required: org.apache.spark.api.java.function.Function[org.apache.spark.sql.Row,?]
   drdd.map{ (row: Row) => row.get(0) }
                        ^

这些函数类型有什么区别,我应该如何构造它?谢谢!

【问题讨论】:

  • 为什么要转换 javaRDD 而不是 rdd?

标签: scala apache-spark mapreduce rdd


【解决方案1】:

例子:

drdd.map(new org.apache.spark.api.java.function.Function[Row, String]() {
    override def call(row: Row): String = row.getString(0)
})

【讨论】:

  • 它有效!谢谢!我只是不明白为什么 scala annoymous 函数在这个例子中起作用? spark.apache.org/docs/latest/programming-guide.html val lineLengths = lines.map(s => s.length)
  • 这个例子有效,因为使用不同类型的 RDD 和 JavaRDD 类有不同的输入参数。基本上我不明白为什么在 Scala 中你想使用 JavaRDD,你应该使用 Scala RDD。
  • 哦...我没有注意到它们是不同的类!我使用它是因为有一个 toJavaRDD 方法。现在我看到有一个返回 scala RDD 的 .rdd 方法。现在一切对我来说都是有意义的。再次感谢 Piotr!
猜你喜欢
  • 2017-08-02
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2015-07-01
相关资源
最近更新 更多