'UnionAllは、' それを扱いますか?
例えば、
df1 = original dataframe
df2 = transformed df1
df1.unionAll(df2)
EDIT:unionAllを使用して実装()
val df1=sqlContext.createDataFrame(Seq( (1,"john",23) , (2,"peter",32))).
toDF("id","name","age")
def udfTransform= udf[Int,Int] { (age) => if (age<25) 25 else age }
val df2=df1.withColumn("age2", udfTransform($"age")).
where("age!=age2").
drop("age2")
df1.withColumn("age", udfTransform($"age")).
unionAll(df2).
orderBy("id").
show()
+---+-----+---+
| id| name|age|
+---+-----+---+
| 1| john| 25|
| 1| john| 23|
| 2|peter| 32|
+---+-----+---+
注:実装は元々提案(ナイーブ)溶液から少し異なります。悪魔は常に細部にいます!
EDIT 2:実装ネストされた配列を使用して
val df1=sx.createDataFrame(Seq( (1,"john",23) , (2,"peter",32))).
toDF("id","name","age")
def udfArr= udf[Array[Int],Int] { (age) =>
if (age<25) Array(age,25) else Array(age) }
val df2=df1.withColumn("age", udfArr($"age"))
df2.show()
+---+-----+--------+
| id| name| age|
+---+-----+--------+
| 1| john|[23, 25]|
| 2|peter| [32]|
+---+-----+--------+
df2.withColumn("age",explode($"age")).show()
+---+-----+---+
| id| name|age|
+---+-----+---+
| 1| john| 23|
| 1| john| 25|
| 2|peter| 32|
+---+-----+---+
を爆発私はあなたの答えは質問を解決しない方法を求めることができますか? – eliasah
上記の実装1と2を参照してください。 – WillemM
2番目のオプションが私のために働くかもしれないと思われて、それを試して更新します。ありがとう。 – Pacchy