错误'str'对象在PySpark

时间:2017-04-18 02:00:22

标签: python-3.x pyspark

在使用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'

你们有谁知道如何解决这个问题? 你需要看什么吗?

1 个答案:

答案 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')

这样可以正常工作,因为架构转换将由元数据存储处理。