如何从另一个数据帧中的JSON创建数据帧?

时间:2019-09-16 00:21:23

标签: apache-spark pyspark

我是新手,一直在努力以这种方式操纵数据。假设我有一个包含两列的数据框,每列包含JSON数据。我想将JSON中的每个键都放在一个数据框中的列中。

例如,如果我有以下数据框:

|           key|         value|
+--------------+--------------+
|{"foo": "bar"}|{"baz": "qux"}|

然后,结果数据帧将如下所示。

|   foo|   baz|
+------+------+
|   bar|   qux|

1 个答案:

答案 0 :(得分:0)

我只是假设您的输入数据为拼花格式:

  1. 从您的输入位置创建InputRDD
  2. 使用“ toDf”功能将InputRDD转换为数据框
  3. 列和列创建两个架构结构
  4. 通过添加新列来转换为新数据框,方法是将jsontype列作为输入参数发送给 from_json 函数以及模式结构

示例:

val Sampledata_df = spark.read.parquet("path/to/input.parquet")  


val key_Json_Schema = StructType(Seq( 
                                   StructField("foo", StringType, true)
                                ))
val value_Json_Schema = StructType(Seq(
                                  StructField("baz", StringType, true) 
                                ))   


val Parsed_df = Sampledata_df
               .withColumn("parsed_key", from_json(col("key"), key_Json_Schema))
               .withColumn("pased_value", from_json(col("value"), value_Json_Schema))


val Output_df = Parsed_df
                .withColumn("output_key", $"parsed_key.foo")
                .withColumn("output_value", $"pased_value.baz")
                .select($"output_key",$"output_value")