【问题标题】:Convert a scala list with key value pairs into a spark data frame using only the values仅使用值将具有键值对的 scala 列表转换为 spark 数据帧
【发布时间】:2020-07-12 23:40:21
【问题描述】:

我是 Scala 和 spark 的新手,我正在尝试将 [key: string, value: string] 格式的列表转换为 spark 数据框。

列表如下所示: (键,[{“field1”:“value1”,“field2”:“value2”}])`

我想把它变成一个看起来像这样的数据框

+------+------+
|field1|field2|
+------+------+
|value1|value2|
+------+------+

任何帮助将不胜感激。

【问题讨论】:

  • 这是 ``` [{"field1": "value1", "field2": "value2"}]``` 字符串吗??
  • 是的,它是一个字符串
  • 检查下面的解决方案,如果它不起作用,请告诉我..

标签: scala apache-spark apache-spark-sql


【解决方案1】:

检查下面的代码。

valueString

scala> val df = Seq(("key","""[{"field1": "value1", "field2": "value2"}]""")).toDF("key","value")
df: org.apache.spark.sql.DataFrame = [key: string, value: string]

scala> import org.apache.spark.sql.types._
import org.apache.spark.sql.types._

scala> val schema = ArrayType(MapType(StringType,StringType))
schema: org.apache.spark.sql.types.ArrayType = ArrayType(MapType(StringType,StringType,true),true)

scala> df.select($"key",explode(from_json($"value",schema)).as("value")).select($"value"("field1").as("field1"),$"value"("field2").as("field2")).show(false)
+------+------+
|field1|field2|
+------+------+
|value1|value2|
+------+------+

valueMap

scala> val df = Seq(("key",Seq(Map("field1" -> "value1","field2" -> "value2")))).toDF("key","value")
df: org.apache.spark.sql.DataFrame = [key: string, value: array<map<string,string>>]

scala> df.select($"key",explode($"value").as("value")).select($"value"("field1").as("field1"),$"value"("field2").as("field2")).show(false)
+------+------+
|field1|field2|
+------+------+
|value1|value2|
+------+------+

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 2020-02-09
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多