在使用Python 3的PySpark上,在包含架构的情况下在表中写入是失败的。
以下是有效的步骤。
a = sc.textFile("ad_actions.csv")
b = a.map(lambda x: x.split('||')).toDF()
b.write.saveAsTable('AD_ACTIONS', mode='append')
但是如果我尝试添加架构,那就失败了:
a = sc.textFile("ad_actions.csv")
b = a.map(lambda x: x.split('||')).toDF(schema=sqlContext.table("AD_ACTIONS").schema)
b.write.saveAsTable('AD_ACTIONS', mode='append')
AttributeError:'str'对象没有属性'toordinal'
你们有谁知道如何解决这个问题? 你需要看什么吗?
答案 0 :(得分:1)
此问题意味着您要添加不属于数据的架构。
问题:
属性错误:' str'对象没有属性' toordinal'
表示您希望将字符串转换为序数。这是date的函数。
因此,问题在于您无法将数据转换为所需的架构。
我建议你,只使用列的名称。像这样:
a = sc.textFile("ad_actions.csv")
b = a.map(lambda x: x.split('||')).toDF(sqlContext.table("AD_ACTIONS").schema.names)
b.write.saveAsTable('AD_ACTIONS', mode='append')
这样可以正常工作,因为架构转换将由元数据存储处理。