【问题标题】:Create spark Dataframe based on another dataframe with json column基于另一个带有 json 列的数据框创建火花数据框
【发布时间】:2021-11-05 23:35:30
【问题描述】:

我有一个 Spark Dataframe (json_df),我需要基于嵌套的 json 创建另一个 Dataframe:

这是我当前的数据框:

我知道我可以手动执行此操作,例如:final_df = json_df.select( col("Body.EquipmentId"),..... ),但我想以通用方式执行此操作。

注意:对于这个特定的 DF,json 记录具有相同的结构。

有什么想法吗?

谢谢!

【问题讨论】:

  • json_df.select('Body.*') 工作吗?
  • 你说得对@werner...解决方案可能是:Final_df = json_df.select(col("body.*"))

标签: python apache-spark pyspark databricks


【解决方案1】:

以编程方式,您可以这样做:

from pyspark.sql import *
from pyspark.sql.functions import *
from pyspark import SparkContext, SparkConf
from pyspark.sql import functions as F

conf = SparkConf()
sc = SparkContext(conf=conf)
spark = SparkSession(sc)

df = sc.parallelize([({"A":1, "B":2},), ({"A":3,"B":4},), ({"A":5,"B":6},)]).toDF(['Body'])
keys_df = df.select(F.explode(F.map_keys(F.col('Body')))).distinct()
keys = list(map(lambda row: row[0], keys_df.collect()))
key_cols = list(map(lambda f: F.col("Body").getItem(f).alias(str(f)), keys))
final_cols = df.select(key_cols)
final_cols.show()

哪个产生

+---+---+
|  B|  A|
+---+---+
|  2|  1|
|  4|  3|
|  6|  5|
+---+---+

如果您已经拥有完整的密钥列表,则可以跳过获取密钥的部分,只需手动设置密钥:

keys = ['A', 'B']

来源:https://mungingdata.com/pyspark/dict-map-to-multiple-columns/

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多