pyspark 数据框中是否有类似于 pandas.io.json.json_normalize 的函数
Is there a function in pyspark dataframe that is similar to 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
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 DataFrame 转换为 Pandas DataFrame:
spark_df.toPandas()
--> 利用 json_normalize() 然后恢复到 Spark
数据框。
要恢复到 Spark DataFrame,您可以使用 spark.createDataFrame(pandas_df)
。
请注意,这种来回解决方案并不理想,因为调用 Pandas() 会导致将 DataFrame 的所有记录收集(.collect())给驱动程序,并可能导致处理较大数据集时出现内存错误。
下面的 link 提供了有关使用 toPandas() 的更多见解:
DF.topandas() throwing error in pyspark
希望这对您有所帮助,祝您好运!
PySpark 中没有 json_normalize
的直接对应项。但 Spark 提供了不同的选择。如果你像这样在 Dataframe 中嵌套对象
one
|_a
|_..
two
|_b
|_..
您可以 select 在 Spark 子列中,如下所示:
import pyspark
from pyspark.sql.session import SparkSession
spark = SparkSession.builder.appName("Whosebug 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)
我想执行类似于 pandas.io.json.json_normalize 的操作是 pyspark 数据帧。 spark中是否有等效的功能?
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.io.json.json_normalize.html
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 DataFrame 转换为 Pandas DataFrame:
spark_df.toPandas()
--> 利用 json_normalize() 然后恢复到 Spark 数据框。要恢复到 Spark DataFrame,您可以使用
spark.createDataFrame(pandas_df)
。
请注意,这种来回解决方案并不理想,因为调用 Pandas() 会导致将 DataFrame 的所有记录收集(.collect())给驱动程序,并可能导致处理较大数据集时出现内存错误。
下面的 link 提供了有关使用 toPandas() 的更多见解: DF.topandas() throwing error in pyspark
希望这对您有所帮助,祝您好运!
PySpark 中没有 json_normalize
的直接对应项。但 Spark 提供了不同的选择。如果你像这样在 Dataframe 中嵌套对象
one
|_a
|_..
two
|_b
|_..
您可以 select 在 Spark 子列中,如下所示:
import pyspark
from pyspark.sql.session import SparkSession
spark = SparkSession.builder.appName("Whosebug 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)