pyspark 数据框中是否有类似于 pandas.io.json.json_normalize

我想执行类似于 pandas.io.json.json_normalize 的操作是 pyspark 数据帧。spark中是否有等效功能?

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.io.json.json_normalize.html


BIG阳
浏览 148回答 2
2回答

白衣非少年

Spark 具有类似的功能explode(),但并不完全相同。这是爆炸在非常高的水平上的工作方式。>>> from pyspark.sql.functions import explode, col>>> data = {'A': [1, 2]}>>> df = spark.createDataFrame(data)>>> df.show() +------+ |     A| +------+ |[1, 2]| +------+>>> df.select(explode(col('A')).alias('normalized')).show()+----------+|normalized|+----------+|         1||         2|+----------+另一方面,您可以使用以下方法将 Spark DataFrame 转换为 Pandas DataFrame:spark_df.toPandas() --> 利用 json_normalize() 然后恢复为 Spark DataFrame。要恢复为 Spark DataFrame,您将使用spark.createDataFrame(pandas_df).请注意,这种来回的解决方案并不理想,因为调用 toPandas() 会导致 DataFrame 的所有记录都被收集 (.collect()) 到驱动程序,并且在处理更大的数据集时可能会导致内存错误。下面的链接提供了有关使用 toPandas() 的更多见解: DF.topandas() throwing error in pyspark希望这会有所帮助,祝你好运!

缥缈止盈

PySpark中没有直接对应的json_normalize。但 Spark 提供了不同的选择。如果您在这样的 Dataframe 中有嵌套对象one|_a|_..two|_b|_..您可以在 Spark 中选择子列,如下所示:import pysparkfrom pyspark.sql.session import SparkSessionspark = 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|+-----+-----+如果您使用此答案中的递归“展平”函数构建所有嵌套列的展平列表,那么我们将得到一个展平列结构:columns = flatten(df.schema)df.select(columns)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python