Apache Sparkでいくつかの調査をしていて、私は本当に奇妙なものに直面しています。以下のコードを参照してください。RDDをDataFrame PySparkに変換するときにエラーが発生する
ClimateRdd = ClimateRdd.map(lambda x: tuple(x))
print ClimateRdd.first()
これらのコマンドは、私には、この行を返す: ('1743-11-01', '4.3839999999999995', '2.294', '\xc3\x85land')
それから私はこのようなデータフレームにこれを移動します。
schemaDf = sqlContext.createDataFrame(ClimateRdd, schema)
schemaDf.registerTempTable('globalTemp')
result = sqlContext.sql("SELECT dt FROM globalTemp")
result.show(5)
これは完璧に動作し、私はこれを得ました結果:
+----------+
| dt|
+----------+
|1743-11-01|
|1743-12-01|
|1744-01-01|
|1744-02-01|
|1744-03-01|
+----------+
only showing top 5 rows
その結果、およびラインを実行しよう:
dates = result.map(lambda x: "Datas: " + x.dt)
print dates.collect()
私はこの原因を使用してJavaの例外が発生しました:Caused by: java.lang.IllegalStateException: Input row doesn't have expected number of values required by the schema. 4 fields are required while 5 values are provided.
は、まあ、私は多くの研究を行なったし、私が問題だったものを見つけ、私は私の最初の変更これにコードの一部:
ClimateRdd = ClimateRdd.map(lambda x: (x[0], x[1], x[2], x[3]))
それは働いた!
最初の部分がうまくいかなかったのはなぜですか?手動でタプルを生成する必要があるのはなぜですか?このタプルを動的に作成する方法はありますか?
4つ以上の要素を持つ 'ClimateRDD'の行があるようです。 'ClimateRdd.map(lambda x:(1、len(x))。countByValue()'のようなことをしてみてください.5要素の行が見えます。 – santon
4つ以上の行要素がありません。 – KartikKannapur
Humm、それは完全な意味を持っています!私は自分のデータセットをチェックし、すべての答えを与えるでしょう。手動タプルは発生しませんでした。私は異なるタイプのカラムを持っているかどうか分からなかったので、データセットをチェックします。ファイルはCSVのようなものかもしれません。 –