将Map(键值)转换为spark scala数据帧

时间:2018-04-11 05:14:54

标签: scala apache-spark dataframe

转换myMap =地图([Col_1-> 1],[Col_2-> 2],[Col_3-> 3])     to spark scala数据框架键作为列,值作为列值,我不是    获得预期结果,请检查我的代码并提供解决方案。

 var finalBufferList = new ListBuffer[String]()
 var finalDfColumnList = new ListBuffer[String]()
 var myMap:Map[String,String] = Map.empty[String,String]
 for ((k,v) <- myMap){
      println(k+"->"+v)
      finalBufferList += v 
      //finalDfColumnList += "\""+k+"\""
      finalDfColumnList += k

    }
    val dff = Seq(finalBufferList.toSeq).toDF(finalDfColumnList.toList.toString())
    dff.show()

My result : 

+------------------------+
|List(Test, Rest, Incedo)|
+------------------------+
|               [4, 5, 3]|
+------------------------+

Expected result :
+------+-------+-------+
|Col_1 | Col_2 | Col_3 |
+------+-------+-------+
| 4    |  5    |  3    |
+------+-------+-------+
please give me suggestion .

1 个答案:

答案 0 :(得分:0)

如果您已将Map定义为

val myMap = Map("Col_1"->"1", "Col_2"->"2", "Col_3"->"3") 

然后您应该使用值作为

创建RDD[Row]
import org.apache.spark.sql.Row
val rdd = sc.parallelize(Seq(Row.fromSeq(myMap.values.toSeq)))

然后使用

创建schema
import org.apache.spark.sql.types._
val schema = StructType(myMap.keys.toSeq.map(StructField(_, StringType)))

然后最后使用createDataFrame函数将dataframe创建为

val df = sqlContext.createDataFrame(rdd, schema)
df.show(false)

最后你应该

+-----+-----+-----+
|Col_1|Col_2|Col_3|
+-----+-----+-----+
|1    |2    |3    |
+-----+-----+-----+

我希望答案很有帮助

但请记住,如果您在小型数据集中工作,这一切都将毫无用处。