从 pyspark 中的字典列创建数据框
Posted
技术标签:
【中文标题】从 pyspark 中的字典列创建数据框【英文标题】:Create a dataframe from column of dictionaries in pyspark 【发布时间】:2018-11-09 04:25:20 【问题描述】:我想从 pyspark 中的现有数据框创建一个新的数据框。数据框“df”包含一个名为“data”的列,该列具有字典行并具有作为字符串的模式。并且每个字典的键是不固定的。例如,名称和地址是第一行字典的键,但对于其他行则不是这样,它们可能不同。以下是该示例;
........................................................
data
........................................................
"name": "sam", "address":"uk"
........................................................
"name":"jack" , "address":"aus", "occupation":"job"
.........................................................
如何转换成具有如下各列的数据框。
name address occupation
sam uk
jack aus job
【问题讨论】:
How to convert list of dictionaries into Spark DataFrame的可能重复 或者Pyspark: explode json in column to multiple columns的骗子。从你的问题很难判断 @pault 这两个链接都不重复。我在询问之前提到了它。这个问题是正确理解的。数据框“df”有一个名为“data”的列,其中包含字典行。它不是字典列表。 你的问题还不清楚。您不能在 pyspark DataFrame 中有“字典行”。df
是熊猫数据框吗?或者data
列实际上是StringType()
或MapType()
类型的? Edit 你的问题与df.select('data').printSchema()
的输出。更好的是,提供reproducible example。也许你正在寻找this answer。
【参考方案1】:
将data
转换为RDD,然后使用spark.read.json
将RDD转换为带有schema的dataFrame。
data = [
"name": "sam", "address":"uk",
"name":"jack" , "address":"aus", "occupation":"job"
]
spark = SparkSession.builder.getOrCreate()
df = spark.read.json(sc.parallelize(data)).na.fill('')
df.show()
+-------+----+----------+
|address|name|occupation|
+-------+----+----------+
| uk| sam| |
| aus|jack| job|
+-------+----+----------+
【讨论】:
我已经尝试过这种方法,它给出 py4j.Py4JException: Method __getnewargs__([]) 不存在。数据是数据框df的列名。【参考方案2】:如果行的顺序不重要,这是另一种方法:
from pyspark import SparkContext
sc = SparkContext()
df = sc.parallelize([
"name":"jack" , "address":"aus", "occupation":"job",
"name": "sam", "address":"uk"
]).toDF()
df = df.na.fill('')
df.show()
+-------+----+----------+
|address|name|occupation|
+-------+----+----------+
| aus|jack| job|
| uk| sam| |
+-------+----+----------+
【讨论】:
以上是关于从 pyspark 中的字典列创建数据框的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PySpark 中的多个列创建字典列表,其中键是列名,值是该列的值?
pyspark 从 pyspark sql 数据框创建字典数据