将熊猫数据帧转换为火花数据帧时收到错误
Posted
技术标签:
【中文标题】将熊猫数据帧转换为火花数据帧时收到错误【英文标题】:error received when convert a pandas dataframe to spark dataframe 【发布时间】:2016-01-15 04:29:51 【问题描述】:由于没有开箱即用的支持在 spark 中读取 excel 文件,所以我首先将 excel 文件读入 pandas 数据帧,然后尝试将 pandas 数据帧转换为 spark 数据帧,但出现以下错误 (我使用的是火花 1.5.1)
import pandas as pd
from pandas import ExcelFile
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
pdf=pd.read_excel('/home/testdata/test.xlsx')
df = sqlContext.createDataFrame(pdf)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/spark/spark-hadoop/python/pyspark/sql/context.py", line 406, in createDataFrame
rdd, schema = self._createFromLocal(data, schema)
File "/opt/spark/spark-hadoop/python/pyspark/sql/context.py", line 337, in _createFromLocal
data = [schema.toInternal(row) for row in data]
File "/opt/spark/spark-hadoop/python/pyspark/sql/types.py", line 541, in toInternal
return tuple(f.toInternal(v) for f, v in zip(self.fields, obj))
File "/opt/spark/spark-hadoop/python/pyspark/sql/types.py", line 541, in <genexpr>
return tuple(f.toInternal(v) for f, v in zip(self.fields, obj))
File "/opt/spark/spark-hadoop/python/pyspark/sql/types.py", line 435, in toInternal
return self.dataType.toInternal(obj)
File "/opt/spark/spark-hadoop/python/pyspark/sql/types.py", line 191, in toInternal
else time.mktime(dt.timetuple()))
AttributeError: 'datetime.time' object has no attribute 'timetuple'
有人知道怎么解决吗?
【问题讨论】:
你能发一个链接到你的test.xlsx
吗?
drive.google.com/file/d/0B9n_aOz2bmxzVUc2S084dW1KR1E/…
【参考方案1】:
我最好的猜测是,当您使用 Pandas 读取数据时“错误地”解析 datetime
数据
以下代码“正常工作”:
import pandas as pd
from pandas import ExcelFile
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
pdf = pd.read_excel('test.xlsx', parse_dates=['Created on','Confirmation time'])
sc = SparkContext()
sqlContext = SQLContext(sc)
sqlContext.createDataFrame(data=pdf).collect()
[Row(Customer=1000935702, Country='TW', ...
请注意,您还有一个日期时间列 'Confirmation date'
,在您的示例中由 NaT
组成,因此使用您的短样本读取 RDD 没有问题,但是如果您碰巧在完整数据集中有一些数据您还必须注意该列。
【讨论】:
之前的错误消失了,但是我得到了一个类型错误。想知道我是否需要专门解决每种列类型?谢谢 >>> df = sqlContext.createDataFrame(pdf) Traceback(最近一次调用最后):文件“以上是关于将熊猫数据帧转换为火花数据帧时收到错误的主要内容,如果未能解决你的问题,请参考以下文章