私はPySparkで、このようなデータフレームを持っている(これはテイクの結果である(3)、データフレームは非常に大きいです):和演算は、例外TypeErrorを与える
sc = SparkContext()
df = [Row(owner=u'u1', a_d=0.1), Row(owner=u'u2', a_d=0.0), Row(owner=u'u1', a_d=0.3)]
同じ所有者にはさらに多くの行があります。私は何をする必要があることただし、スキーマがdouble型の値ではなく、文字列(これが含まれている、所有者ごとのフィールドa_dの値を合計するグループ化した後、
b = df.groupBy('owner').agg(sum('a_d').alias('a_d_sum'))
などが、これは誤り
TypeError: unsupported operand type(s) for +: 'int' and 'str'
をスローしていますprintSchema()から来ます):
root
|-- owner: string (nullable = true)
|-- a_d: double (nullable = true)
ここで何が起こっていますか?
ですか?つまり、すべての行に有効なa_d値があることを確認しましたか? – mgaido
@ mark91 a_dフィールドは、別のデータフレーム内の2つの二重列の乗算から来ています。文字列ではありません。これをチェックできる方法はありますか? –
あなたは基礎となるRDDを取得し、フィールドa_d ....でRegExpを使ってそれをフィルタリングするようなことをすることができます。あるいは、Hiveテーブルに結果を書き込んで、そのカラムでHiveを使ってそれを読み取ることができます。あなたはこの問題を示す少数のデータのサブセットを持っています。あなたはそれを調べることすらできます... – mgaido