地图功能无法与 Dataframe(toDF)一起正常工作 [重复]

Posted

技术标签:

【中文标题】地图功能无法与 Dataframe(toDF)一起正常工作 [重复]【英文标题】:map function is not working properly with Dataframe(toDF) [duplicate] 【发布时间】: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()
                       ^

【问题讨论】:

【参考方案1】:

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

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

或更短:

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

或使用模式匹配:

primitiveDF.mapcase Row(i:Int) => i+1.collect()

【讨论】:

以上是关于地图功能无法与 Dataframe(toDF)一起正常工作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

RDDDataFrame与DataSet的相互转换

如何使用 toDF() 将自定义 Java 类对象的 RDD 转换为 DataFrame?

如何将地图与具有正则表达式键的字典一起使用?

toDF() 不处理 RDD

Spark Dataframe 映射函数

谷歌地图根本无法与 Meteor 一起使用 - iOS