在 PySpark 中没有 json_normalize 的直接对应物。但 Spark 提供了不同的选择。如果您在这样的 Dataframe 中有嵌套对象
one
|_a
|_..
two
|_b
|_..
您可以在 Spark 中选择子列,如下所示:
import pyspark
from pyspark.sql.session import SparkSession
spark = SparkSession.builder.appName("stackoverflow demo").getOrCreate()
columns = ['id', 'one', 'two']
vals = [
(1, {"a": False}, {"b": True}),
(2, {"a": True}, {"b": False})
]
df = spark.createDataFrame(vals, columns)
df.select("one.a", "two.b").show()
+-----+-----+
| a| b|
+-----+-----+
|false| true|
| true|false|
+-----+-----+
如果您使用来自此answer 的递归“展平”函数构建所有嵌套列的展平列表,那么我们将得到一个展平列结构:
columns = flatten(df.schema)
df.select(columns)