Dan*_*nov 3 scala dataframe apache-spark
在我的应用程序中,我需要从Map创建一个单行DataFrame。
这样的地图就像
("col1" -> 5, "col2" -> 10, "col3" -> 6)
Run Code Online (Sandbox Code Playgroud)
将被转换为具有单行的DataFrame,并且映射键将成为列的名称。
col1 | col2 | col3
5 | 10 | 6
Run Code Online (Sandbox Code Playgroud)
如果您想知道为什么要这样做-我只需要使用MongoSpark连接器将包含一些统计信息的单个文档保存到MongoDB中,该连接器就可以保存DF和RDD。
我认为对列名称进行排序不会有任何伤害。
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()
Run Code Online (Sandbox Code Playgroud)
给出:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 5| 6| 10|
+----+----+----+
Run Code Online (Sandbox Code Playgroud)
这个想法很简单:将映射转换为元组列表,解压缩,将键转换为模式,将值转换为单行RDD,从这两部分构建数据框(那里的接口createDataFrame有点奇怪,接受java.util.Lists和厨房水槽,但List由于某些原因不接受通常的标量)。
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |