【发布时间】:2016-12-12 04:21:10
【问题描述】:
我有 csv 数据并使用 read_csv 创建了 Pandas 数据框,并将所有列强制为字符串。 然后,当我尝试从 Pandas 数据帧创建 Spark 数据帧时,我收到以下错误消息。
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
z=pd.read_csv("mydata.csv", dtype=str)
z.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 74044003 entries, 0 to 74044002
Data columns (total 12 columns):
primaryid object
event_dt object
age object
age_cod object
age_grp object
sex object
occr_country object
drug_seq object
drugname object
route object
outc_cod object
pt object
q= sqlContext.createDataFrame(z)
File "<stdin>", line 1, in <module>
File "/usr/hdp/2.4.2.0-258/spark/python/pyspark/sql/context.py", line 425, in createDataFrame
rdd, schema = self._createFromLocal(data, schema)
File "/usr/hdp/2.4.2.0-258/spark/python/pyspark/sql/context.py", line 341, in _createFromLocal
struct = self._inferSchemaFromList(data)
File "/usr/hdp/2.4.2.0-258/spark/python/pyspark/sql/context.py", line 241, in _inferSchemaFromList
schema = reduce(_merge_type, map(_infer_schema, data))
File "/usr/hdp/2.4.2.0-258/spark/python/pyspark/sql/types.py", line 862, in _merge_type
for f in a.fields]
File "/usr/hdp/2.4.2.0-258/spark/python/pyspark/sql/types.py", line 856, in _merge_type
raise TypeError("Can not merge type %s and %s" % (type(a), type(b)))
TypeError: Can not merge type <class 'pyspark.sql.types.DoubleType'> and <class 'pyspark.sql.types.StringType'>
这是一个例子。我正在下载公共数据并创建 pandas 数据帧,但 spark 不会从 pandas 数据帧创建 spark 数据帧。
import pandas as pd
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
url ="http://www.nber.org/fda/faers/2016/demo2016q1.csv.zip"
import requests, zipfile, StringIO
r = requests.get(url, stream=True)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
z.extractall()
z=pd.read_csv("demo2016q1.csv") # creates pandas dataframe
Data_Frame = sqlContext.createDataFrame(z)
【问题讨论】:
-
a) 为什么要在本地读取数据只是为了并行化。这是反模式。 b) 所有被标记为
object的列都暗示了一些 Spark DataFrames 不支持的异构数据。 -
你是对的,这不是在本地阅读的正确方式,但由于其他选项失败,我希望来自 pandas 的数据帧将易于 spark 处理。正如您所说,这些列是异构的。有没有我可以尝试的解决方法?
-
你能提供一个minimal reproducible example吗?一些玩具样品将说明那里发生了什么......
-
我添加了一个带有公共数据的示例代码。
标签: pandas apache-spark dataframe pyspark apache-spark-sql