在scala中将array <map <string,string >>类型转换为<string,string>

时间:2019-02-03 08:21:59

标签: scala apache-spark dataframe rdd

将数据框中的列转换为字符串格式时遇到问题。数据框的示例如下:

-- example_code_b: string (nullable = true)
-- example_code: array (nullable = true)
[info]  |    |-- element: map (containsNull = true)
[info]  |    |    |-- key: string
[info]  |    |    |-- value: string (valueContainsNull = true)

我想将example code从当前的(string,string)转换成array(map(string,string))的格式。

  

输入形式为[Map(entity -> PER), Map(entity -> PER)]和   我希望输出为PER,PER

的形式

2 个答案:

答案 0 :(得分:1)

您可以在DataFrame API中执行UDF或使用Dataset-API来执行此操作:

import spark.implicits._

df
  .as[Seq[Map[String,String]]]
  .map(s => s.reduce(_ ++ _))
  .toDF("example_code")
  .show()

请注意,这并不考虑多个键的情况,它们不是“合并”的,只是被覆盖了

答案 1 :(得分:1)

您可以简单地在任何数组列上使用explode函数,这将为每个数组值创建单独的行。

val newDF = df.withColumn("mymap" explode(col("example_code")))