如何从字典创建数据框,其中每个项目都是PySpark中的一列

时间:2018-02-14 21:25:14

标签: dataframe pyspark spark-dataframe

我想从字典中创建一个新的数据框。字典包含列名作为键,列列数据作为值。例如:

col_dict = {'col1': [1, 2, 3],
            'col2': [4, 5, 6]}

我需要这个像这样的数据框:

+------+------+
| col1 | col2 |
+------+------+
|     1|     4|
|     2|     5|
|     3|     6|
+------+------+

似乎没有一种简单的方法可以做到这一点。

1 个答案:

答案 0 :(得分:3)

最简单的方法是创建一个pandas DataFrame并转换为Spark DataFrame:

使用Pandas

col_dict = {'col1': [1, 2, 3],
            'col2': [4, 5, 6]}

import pandas as pd
pandas_df = pd.DataFrame(col_dict)
df = sqlCtx.createDataFrame(pandas_df)
df.show()
#+----+----+
#|col1|col2|
#+----+----+
#|   1|   4|
#|   2|   5|
#|   3|   6|
#+----+----+

没有Pandas

如果pandas不可用,您只需将数据操作为适用于createDataFrame()功能的表单即可。引用自己previous answer

  

我觉得将createDataFrame()的参数看作是一个有用的东西   元组列表,其中列表中的每个条目对应于一行   DataFrame和元组的每个元素对应一列。

colnames, data = zip(*col_dict.items())
print(colnames)
#('col2', 'col1')
print(data)
#([4, 5, 6], [1, 2, 3])

现在我们需要修改数据,使其成为元组列表,其中每个元素都包含相应列的数据。幸运的是,使用zip

很容易
data = zip(*data)
print(data)
#[(4, 1), (5, 2), (6, 3)]

现在致电createDataFrame()

df = sqlCtx.createDataFrame(data, colnames)
df.show()
#+----+----+
#|col2|col1|
#+----+----+
#|   4|   1|
#|   5|   2|
#|   6|   3|
#+----+----+