![](/img/trans.png)
[英]Save spark DataFrame to csv file with map<string,string> column type
[英]Dump array of map column of a spark dataframe into csv file
我有以下火花數據框及其對應的架構
+----+--------------------+
|name| subject_list|
+----+--------------------+
| Tom|[[Math -> 99], [P...|
| Amy| [[Physics -> 77]]|
+----+--------------------+
root
|-- name: string (nullable = true)
|-- subject_list: array (nullable = true)
| |-- element: map (containsNull = true)
| | |-- key: string
| | |-- value: integer (valueContainsNull = false)
我如何將這個數據幀轉儲到由“ \\ t”分隔的csv文件中,如下所示
Tom [(Math, 99), (Physics, 88)]
Amy [(Physics, 77)]
這是指向該問題的類似帖子的鏈接 ,但它用於轉儲字符串數組而不是map數組。
感謝您的幫助,謝謝。
引發錯誤和其他詳細信息的原因在您共享的同一鏈接中列出。 這是stringify
數組的stringify
的修改版本:
def stringify = udf((vs: Seq[Map[String, Int]]) => vs match {
case null => null
case x => "[" + x.flatMap(_.toList).mkString(",") + "]"
})
學分: 鏈接
您可以編寫udf
以將Map
轉換為string
如您所願
val mapToString = udf((marks: Map[String, String]) => {
marks.map{case (k, v) => (s"(${k},${v})")}.mkString("[",",", "]")
})
dff.withColumn("marks", mapToString($"marks"))
.write.option("delimiter", "\t")
.csv("csvoutput")
輸出:
Tom [(Math,99),(Physics,88)]
Amy [(Physics,77)]
但我不建議您這樣做,您在再次閱讀並必須手動解析時會遇到問題,最好將這些地圖展平為
dff.select($"name", explode($"marks")).write.csv("csvNewoutput")
將存儲為
Tom,Math,99
Tom,Physics,88
Amy,Physics,77
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.