python - 如何在 PySpark 中将字典转换为数据框?
问题描述
我正在尝试将字典:
data_dict = {'t1': '1', 't2': '2', 't3': '3'}
转换为数据框:
key | value|
----------------
t1 1
t2 2
t3 3
为此,我尝试了:
schema = StructType([StructField("key", StringType(), True), StructField("value", StringType(), True)])
ddf = spark.createDataFrame(data_dict, schema)
但我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/session.py", line 748, in createDataFrame
rdd, schema = self._createFromLocal(map(prepare, data), schema)
File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/session.py", line 413, in _createFromLocal
data = list(data)
File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/session.py", line 730, in prepare
verify_func(obj)
File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/types.py", line 1389, in verify
verify_value(obj)
File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/types.py", line 1377, in verify_struct
% (obj, type(obj))))
TypeError: StructType can not accept object 't1' in type <class 'str'>
所以我在没有指定任何架构的情况下尝试了这个,只指定了列数据类型:
ddf = spark.createDataFrame(data_dict, StringType()
&ddf = spark.createDataFrame(data_dict, StringType(), StringType())
但两者都会产生一个数据框,其中有一列是字典的键,如下所示:
+-----+
|value|
+-----+
|t1 |
|t2 |
|t3 |
+-----+
谁能让我知道如何在 PySpark 中将字典转换为 spark 数据框?
解决方案
您可以使用data_dict.items()
列出键/值对:
spark.createDataFrame(data_dict.items()).show()
哪个打印
+---+---+
| _1| _2|
+---+---+
| t1| 1|
| t2| 2|
| t3| 3|
+---+---+
当然,您可以指定您的架构:
spark.createDataFrame(data_dict.items(),
schema=StructType(fields=[
StructField("key", StringType()),
StructField("value", StringType())])).show()
导致
+---+-----+
|key|value|
+---+-----+
| t1| 1|
| t2| 2|
| t3| 3|
+---+-----+
推荐阅读
- javascript - 如何通过 ScriptManager.RegisterStartupScript 将特殊字符从 C# 传递到 JavaScript
- ios - 本地化并不总是适用于某些文本
- java - 通过单元测试测试服务方法?
- php - 获取名称而不是 ID
- mysql - Hibernate & MySQL:创建记录时,添加第二条记录并且完全为空
- python - 在 cmd 中找不到 Python 模块
- ruby-on-rails - Rails 更新操作无法检查参数
- python - 使用 Python 的线程和信号生成 QTreeView
- redis - Redis,评估。发送空
- javascript - 我想在 jCombo URL Jquery 中传递变量