将List [Map <string,string>]转换为Spark数据框

时间:2018-11-23 08:59:54

标签: apache-spark apache-spark-sql

我想将List [Map]转换为spark数据框, Map是名称,Map的键是DataFrame的列

2 个答案:

答案 0 :(得分:0)

在这里您可以这样做

val map1 = {"a"->1}
val map2 = {"b"->2}
val lst = List(map1,map2)
val lstDF = lst.toDF
lstDF.take(2).foreach(println)

答案 1 :(得分:0)

如果您已经具有 res ,它是列表[Map [String,String]]

res: List[Map[String,String]] = List(Map(A -> a1, B -> b1, C -> c1), Map(A -> a2, B -> b2, C -> c2))

您可以执行以下操作来创建数据框:

//create your rows
val rows = res.map(m => Row(m.values.toSeq:_*))

//create the schema from the header
val header = res.head.keys.toList
val schema = StructType(header.map(fieldName => StructField(fieldName, StringType, true)))

//create your rdd
val rdd = sc.parallelize(rows)

//create your dataframe using 
val df = spark.createDataFrame(rdd, schema)

您可以使用 df.show()输出结果:

+---+---+---+
|  A|  B|  C|
+---+---+---+
| a1| b1| c1|
| a2| b2| c2|
+---+---+---+

请注意,您还可以通过以下方式创建架构:

val schema = StructType(
   List(
     StructField("A", StringType, true),
     StructField("B", StringType, true),
     StructField("C", StringType, true)
   )
 )