从pyspark中的字典列创建一个数据框

时间:2018-11-09 04:25:21

标签: python python-2.7 dictionary pyspark pyspark-sql

我想从pyspark中的现有数据框创建一个新的数据框。数据框“ df”包含一列名为“ data”的列,该列具有字典的行并且具有作为字符串的模式。而且每个字典的键都不是固定的,例如名称和地址是第一行字典的键,但其他行可能不是这样,它们可能有所不同。以下是该示例;

........................................................
  data 
........................................................
 {"name": "sam", "address":"uk"}
........................................................
{"name":"jack" , "address":"aus", "occupation":"job"}
.........................................................

如何转换为具有以下单独列的数据框。

 name   address    occupation
 sam       uk       
 jack      aus       job

2 个答案:

答案 0 :(得分:2)

data转换为RDD,然后使用spark.read.json将RDD转换为具有模式的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|
+-------+----+----------+

答案 1 :(得分:1)

如果行的顺序不重要,则这是另一种方法:

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|          |
+-------+----+----------+