Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyspark dataframe中是否有类似于pandas.io.json.json_normalize的函数_Python_Json_Pandas_Pyspark_Pyspark Dataframes - Fatal编程技术网

Python pyspark dataframe中是否有类似于pandas.io.json.json_normalize的函数

Python pyspark dataframe中是否有类似于pandas.io.json.json_normalize的函数,python,json,pandas,pyspark,pyspark-dataframes,Python,Json,Pandas,Pyspark,Pyspark Dataframes,我想执行与pandas.io.json.json类似的操作,normalize is pyspark dataframe。spark中是否有等效函数 Spark有一个类似的功能explode(),但它并不完全相同 以下是explode如何在非常高的级别上工作 >>> from pyspark.sql.functions import explode, col >>> data = {'A': [1, 2]} >>> df = spark.

我想执行与pandas.io.json.json类似的操作,normalize is pyspark dataframe。spark中是否有等效函数


Spark有一个类似的功能
explode()
,但它并不完全相同

以下是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数据帧转换为Pandas数据帧:

  • spark_df.toPandas()
    -->利用json_normalize(),然后恢复为spark 数据帧

  • 要恢复到Spark数据帧,可以使用
    Spark.createDataFrame(pandas\u df)

请注意,这种来回的解决方案并不理想,因为调用toPandas(),会将数据帧的所有记录(.collect())收集到驱动程序,并且在处理较大的数据集时可能会导致内存错误

下面的链接提供了有关使用toPandas()的更多信息:


希望这对你有帮助,祝你好运

Spark有一个类似的函数
explode()
,但它并不完全相同

以下是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数据帧转换为Pandas数据帧:

  • spark_df.toPandas()
    -->利用json_normalize(),然后恢复为spark 数据帧

  • 要恢复到Spark数据帧,可以使用
    Spark.createDataFrame(pandas\u df)

请注意,这种来回的解决方案并不理想,因为调用toPandas(),会将数据帧的所有记录(.collect())收集到驱动程序,并且在处理较大的数据集时可能会导致内存错误

下面的链接提供了有关使用toPandas()的更多信息:


希望这对你有帮助,祝你好运

PySpark中没有直接对应的
json\u normalize
。但是Spark提供了不同的选择。如果在这样的数据帧中有嵌套对象

one
|_a
|_..
two
|_b
|_..
您可以在子列中选择,如下所示:

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|
+-----+-----+
如果使用递归的“展平”函数从中构建所有嵌套列的展平列表,那么我们将得到一个展平列结构:

columns = flatten(df.schema)
df.select(columns)

PySpark中没有直接对应的
json\u normalize
。但是Spark提供了不同的选择。如果在这样的数据帧中有嵌套对象

one
|_a
|_..
two
|_b
|_..
您可以在子列中选择,如下所示:

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|
+-----+-----+
如果使用递归的“展平”函数从中构建所有嵌套列的展平列表,那么我们将得到一个展平列结构:

columns = flatten(df.schema)
df.select(columns)