5
をarray-(データフレーム)の配列を爆発:私はこのようなデータフレーム持ってpySpark
+-----+--------------------+
|index| merged|
+-----+--------------------+
| 0|[[2.5, 2.4], [3.5...|
| 1|[[-1.0, -1.0], [-...|
| 2|[[-1.0, -1.0], [-...|
| 3|[[0.0, 0.0], [0.5...|
| 4|[[0.5, 0.5], [1.0...|
| 5|[[0.5, 0.5], [1.0...|
| 6|[[-1.0, -1.0], [0...|
| 7|[[0.0, 0.0], [0.5...|
| 8|[[0.5, 0.5], [1.0...|
+-----+--------------------+
を私は
+-----+-------+-------+
|index|Column1|Column2|
+-----+-------+-------+
| 0| 2.5| 2.4 |
| 1| 3.5| 0.5|
| 2| -1.0| -1.0|
| 3| -1.0| -1.0|
| 4| 0.0 | 0.0 |
| 5| 0.5| 0.74|
+-----+-------+-------+
各タプルにマージされた列を爆発したい[[2.5、2.4] 、[3.5,0,5]]は2列を返します.2,5と3,5が列1に格納され、(2.4,0,5)が2列目に格納されることがわかります
df= df.withColumn("merged", df["merged"].cast("array<array<float>>"))
df= df.withColumn("merged",explode('merged'))
、私は別のDF
を作成するためのUDFを適用しますが、私は、データをキャストまたは爆発適用することはできません、と私は
pyspark.sql.utils.AnalysisException: u"cannot resolve 'cast(merged as array<array<float>)' due to data type mismatch: cannot cast StringType to ArrayType(StringType,true)
エラーを受け取った私はまた
df= df.withColumn("merged", df["merged"].cast("array<string>"))
を試してみました
でも何も動作しません キャストなしで爆発を適用すると、
あなたはDFのスキーマを与えることができますか?マージされたように見えるのは、実際には文字列であり、引数ではありません。 'split'を使って文字列を区切り文字で分割することができます。また、あなたの質問にはタイプミスがあるようです:予期した結果の例では、分解された値のインデックスが同じではありませんか?それともあなたが本当に欲しいものを与えたのですか? – Wilmerton
Thx、私は自分のコードを読んで、私は私のラムダ関数(私の列をマージする人)で戻り値の型ArrayType(ArrayType(FloatType())を追加するのを忘れていたことを発見しました – MrGildarts
...問題は解決しましたか? – Wilmerton