Ang*_*Sen 4 pyspark pyspark-sql
我试图将以下Python dict转换为PySpark DataFrame,但我没有获得预期的输出.
dict_lst = {'letters': ['a', 'b', 'c'],
'numbers': [10, 20, 30]}
df_dict = sc.parallelize([dict_lst]).toDF() # Result not as expected
df_dict.show()
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用熊猫的情况下做到这一点?
引用自己:
我发现将createDataFrame()的参数视为元组列表是有用的,其中列表中的每个条目对应于DataFrame中的一行,并且元组的每个元素对应一列.
所以最简单的方法是将字典转换为这种格式.你可以使用zip()以下方法轻松完成:
column_names, data = zip(*dict_lst.items())
spark.createDataFrame(zip(*data), column_names).show()
#+-------+-------+
#|letters|numbers|
#+-------+-------+
#| a| 10|
#| b| 20|
#| c| 30|
#+-------+-------+
Run Code Online (Sandbox Code Playgroud)
以上假设所有列表的长度相同.如果不是这种情况,则必须使用itertools.izip_longest(python2)或itertools.zip_longest(python3).
from itertools import izip_longest as zip_longest # use this for python2
#from itertools import zip_longest # use this for python3
dict_lst = {'letters': ['a', 'b', 'c'],
'numbers': [10, 20, 30, 40]}
column_names, data = zip(*dict_lst.items())
spark.createDataFrame(zip_longest(*data), column_names).show()
#+-------+-------+
#|letters|numbers|
#+-------+-------+
#| a| 10|
#| b| 20|
#| c| 30|
#| null| 40|
#+-------+-------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |