使用 map<string,string> 列类型将 spark DataFrame 保存到 csv 文件
Save spark DataFrame to csv file with map<string,string> column type
我编写了将 Map[String,String] 值转换为 String 的 udf 函数:
udf("mapToString", (input: Map[String,String]) => input.mkString(","))
spark-shell
给我错误:
<console>:24: error: overloaded method value udf with alternatives:
(f: AnyRef,dataType: org.apache.spark.sql.types.DataType)org.apache.spark.sql.expressions.UserDefinedFunction <and>
...
cannot be applied to (String, Map[String,String] => String)
udf("mapToString", (input: Map[String,String]) => input.mkString(","))
是否有任何方法可以将 Map[String,String] 值的列转换为字符串值?
我需要这种转换,因为我需要将数据帧保存为 csv 文件
假设您有 DataFrame
作为
+---+--------------+
|id |map |
+---+--------------+
|1 |Map(200 -> DS)|
|2 |Map(300 -> CP)|
+---+--------------+
具有以下架构
root
|-- id: integer (nullable = false)
|-- map: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
你可以写一个 udf
看起来像:
def mapToString = udf((map: collection.immutable.Map[String, String]) =>
map.mkString.replace(" -> ", ","))
并使用 udf
函数与 withColumn
API 作为
df.withColumn("map", mapToString($"map"))
你应该有最终的 DataFrame
其中 Map
更改为 String
+---+------+
|id |map |
+---+------+
|1 |200,DS|
|2 |300,CP|
+---+------+
root
|-- id: integer (nullable = false)
|-- map: string (nullable = true)
我编写了将 Map[String,String] 值转换为 String 的 udf 函数:
udf("mapToString", (input: Map[String,String]) => input.mkString(","))
spark-shell
给我错误:
<console>:24: error: overloaded method value udf with alternatives:
(f: AnyRef,dataType: org.apache.spark.sql.types.DataType)org.apache.spark.sql.expressions.UserDefinedFunction <and>
...
cannot be applied to (String, Map[String,String] => String)
udf("mapToString", (input: Map[String,String]) => input.mkString(","))
是否有任何方法可以将 Map[String,String] 值的列转换为字符串值? 我需要这种转换,因为我需要将数据帧保存为 csv 文件
假设您有 DataFrame
作为
+---+--------------+
|id |map |
+---+--------------+
|1 |Map(200 -> DS)|
|2 |Map(300 -> CP)|
+---+--------------+
具有以下架构
root
|-- id: integer (nullable = false)
|-- map: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
你可以写一个 udf
看起来像:
def mapToString = udf((map: collection.immutable.Map[String, String]) =>
map.mkString.replace(" -> ", ","))
并使用 udf
函数与 withColumn
API 作为
df.withColumn("map", mapToString($"map"))
你应该有最终的 DataFrame
其中 Map
更改为 String
+---+------+
|id |map |
+---+------+
|1 |200,DS|
|2 |300,CP|
+---+------+
root
|-- id: integer (nullable = false)
|-- map: string (nullable = true)