【问题标题】:map function is not working properly with Dataframe(toDF) [duplicate]地图功能无法与 Dataframe(toDF)一起正常工作 [重复]
【发布时间】:2019-01-20 22:41:57
【问题描述】:

我在下面的代码中运行为 Dataset (toDS),它工作正常,但是当我将其转换为 Dataframe (toDF) 时,它不适用于 Dataframe。

数据集代码:

val primitiveDS = Seq(1, 2, 3).toDS()    
primitiveDS.map(_ + 1).collect() 
// **Output** : Array(2, 3, 4)

数据框代码:

val primitiveDF = Seq(1, 2, 3).toDF()
primitiveDF.map(_ + 1).collect()

错误

scala> primitiveDF.map(_ + 1).collect()
<console>:26: error: type mismatch;
 found   : Int(1)
 required: String
       primitiveDF.map(_ + 1).collect()
                       ^

【问题讨论】:

    标签: scala apache-spark dataframe dataset


    【解决方案1】:

    如果您在 DataFrame 上进行映射,您的元素将是 Row 类型(一种无类型集合),您不能只将 1 添加到行,而是必须先使用访问器方法从行中提取元素喜欢.getInt:

    primitiveDF.map((r: Row) => r.getInt(0) + 1).collect()
    

    或更短:

    primitiveDF.map(_.getInt(0) + 1).collect()
    

    或使用模式匹配:

    primitiveDF.map{case Row(i:Int) => i+1}.collect()
    

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2021-05-22
      相关资源
      最近更新 更多