2017-04-18 5 views
0

ライティングには属性「toordinal」がありません。エラー「strの」オブジェクトは、テーブルに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' object has no attribute 'toordinal'

あなたのいずれかが、私はこの問題を解決する方法を知っていますか? 何か見る必要がありますか?

+0

ロジックに問題があるようです。あなたのデータは、サンプルのように見えます。 – Pushkr

答えて

1

この問題は、データに属していないスキーマを追加していることを意味します。

問題:

AttributeError: 'str' object has no attribute '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') 

これは、スキーマ変換がメタデータストアによって処理されるため、正常に動作します。

関連する問題