5, "col2" -> 10, "col3" -> 6) 将被转换为具有单行的 Da-6ren">
gpt4 book ai didi

scala - Spark - 将 Map 转换为单行 DataFrame

转载 作者:行者123 更新时间:2023-12-03 18:52:51 29 4
gpt4 key购买 nike

在我的应用程序中,我需要从 Map 创建一个单行 DataFrame。

所以 map 就像

("col1" -> 5, "col2" -> 10, "col3" -> 6)

将被转换为具有单行的 DataFrame,并且 map 键将成为列的名称。
col1 | col2 | col3
5 | 10 | 6

如果您想知道为什么我想要这个 - 我只需要使用允许保存 DF 和 RDD 的 MongoSpark 连接器将带有一些统计信息的单个文档保存到 MongoDB 中。

最佳答案

我认为对列名进行排序并没有什么坏处。

  import org.apache.spark.sql.types._
val map = Map("col1" -> 5, "col2" -> 6, "col3" -> 10)
val (keys, values) = map.toList.sortBy(_._1).unzip
val rows = spark.sparkContext.parallelize(Seq(Row(values: _*)))
val schema = StructType(keys.map(
k => StructField(k, IntegerType, nullable = false)))
val df = spark.createDataFrame(rows, schema)
df.show()

给出:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 5| 6| 10|
+----+----+----+

这个想法很简单:将映射转换为元组列表,解压缩,将键转换为模式并将值转换为单条目行 RDD,从两部分构建数据帧( interface for createDataFrame 在那里有点奇怪,接受 java.util.List s 和厨房水槽,但由于某种原因不接受通常的 scala List)。

关于scala - Spark - 将 Map 转换为单行 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49386299/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com