【发布时间】:2017-07-06 12:08:06
【问题描述】:
当我开始学习 PySpark 时,我使用了一个列表来创建一个dataframe。现在从列表中推断模式已被弃用,我收到一个警告,它建议我改用pyspark.sql.Row。但是,当我尝试使用Row 创建一个时,我遇到了推断架构问题。这是我的代码:
>>> row = Row(name='Severin', age=33)
>>> df = spark.createDataFrame(row)
这会导致以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/spark2-client/python/pyspark/sql/session.py", line 526, in createDataFrame
rdd, schema = self._createFromLocal(map(prepare, data), schema)
File "/spark2-client/python/pyspark/sql/session.py", line 390, in _createFromLocal
struct = self._inferSchemaFromList(data)
File "/spark2-client/python/pyspark/sql/session.py", line 322, in _inferSchemaFromList
schema = reduce(_merge_type, map(_infer_schema, data))
File "/spark2-client/python/pyspark/sql/types.py", line 992, in _infer_schema
raise TypeError("Can not infer schema for type: %s" % type(row))
TypeError: Can not infer schema for type: <type 'int'>
所以我创建了一个架构
>>> schema = StructType([StructField('name', StringType()),
... StructField('age',IntegerType())])
>>> df = spark.createDataFrame(row, schema)
然后,这个错误被抛出。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/spark2-client/python/pyspark/sql/session.py", line 526, in createDataFrame
rdd, schema = self._createFromLocal(map(prepare, data), schema)
File "/spark2-client/python/pyspark/sql/session.py", line 387, in _createFromLocal
data = list(data)
File "/spark2-client/python/pyspark/sql/session.py", line 509, in prepare
verify_func(obj, schema)
File "/spark2-client/python/pyspark/sql/types.py", line 1366, in _verify_type
raise TypeError("StructType can not accept object %r in type %s" % (obj, type(obj)))
TypeError: StructType can not accept object 33 in type <type 'int'>
【问题讨论】:
-
这是文档中的一个示例:EXAMPLE
-
@Jeremy 你有没有回答过这个问题?我清楚地说我知道如何从
list创建一个DataFrame,但是当我使用pyspark.sql.Row创建一个时出现错误。我从下面的@Daniel De Paula 那里得到了我的问题的答案。在将某些内容标记为重复之前,至少检查一次问题。
标签: apache-spark pyspark apache-spark-sql