转换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 .
答案 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 |
+-----+-----+-----+
我希望答案很有帮助
但请记住,如果您在小型数据集中工作,这一切都将毫无用处。