【问题标题】:missing parameter type for expanded function The argument types of an anonymous function must be fully known. (SLS 8.5) Expected type was:?扩展函数缺少参数类型 匿名函数的参数类型必须是完全已知的。 (SLS 8.5)预期类型是:?
【发布时间】:2016-12-08 19:57:20
【问题描述】:

当我使用 Spark2.0 Dataset 和 DataFrame 读取数据时,代码是:

 def func(docs: DataFrame): RDD[(String, String)] = {
   docs.select("id", "title").map{
     case Row(id: String, title: String) => (id, title)
 }}

但是编译错误是

missing parameter type for expanded function The argument types of an anonymous function must be fully known. (SLS 8.5) Expected type was: ?

我也试试这个方法

def func(docs: DataFrame): RDD[(String, String)] = { docs.select("id", "title").map{val => val match{ case Row(id: String, title: String) => (id, title) }}} 但这是行不通的! 'val' 的错误是:

◾missing parameter type

我怎么能喜欢这个!

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    你可以使用DataFrame.rdd解决它

     // before map 
     def func(docs: DataFrame): RDD[(String, String)] = {
       docs.select("id", "title").rdd.map{
         case Row(id: String, title: String) => (id, title)
     }}
    
    // or after map
    def func(docs: DataFrame): RDD[(String, String)] = {
       docs.select("_1", "_2").map{ 
         case Row(id: String, title: String) => (id, title)
       }.rdd
    }
    

    请注意,在 Spark 1.x 中,DataFrame.map 返回 RDD[R],并将函数作为 (Row) => R.

    在 Spark 2.x Dataset.map 中返回 Dataset[U],函数为 (T) => U。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      相关资源
      最近更新 更多