あなたはあなたが簡単なgroupBy
、aggregations
を行うと、あなたが使用することができますfunctions
df.orderBy("B").groupBy("A").agg(collect_list(concat_ws(",", col("B"), col("C"))) as "B")
を使用することにより
+---+---------------+
|A |B |
+---+---------------+
|1 |[3,1, 5,3, 8,2]|
|2 |[2,1] |
+---+---------------+
として次のような出力を得ることができます
+---+---+---+
|A |B |C |
+---+---+---+
|1 |3 |1 |
|1 |8 |2 |
|1 |5 |3 |
|2 |2 |1 |
+---+---+---+
ように、入力データフレームを持っていることを考えるとudf
関数t O
def joinString = udf((b: mutable.WrappedArray[String]) => {
b.mkString("/")
})
newdf.withColumn("B", joinString(col("B"))).show(false)
として最終的に望ましい結果を得るあなたが
+---+-----------+
|A |B |
+---+-----------+
|1 |3,1/5,3/8,2|
|2 |2,1 |
+---+-----------+
注あなたは
編集
を動作するように上記のすべてのための
import org.apache.spark.sql.functions._
が必要になりますを取得する必要があります
列Bが最初の列Bの値に基づいて、このために
を発注しているあなただけ
import org.apache.spark.sql.functions._
val newdf = df.groupBy("A").agg(collect_list(concat_ws(",", col("B"), col("C"))) as "B")
def joinString = udf((b: mutable.WrappedArray[String]) => {
b.mkString("/")
})
newdf.withColumn("B", joinString(col("B"))).show(false)
としてORDERBYの一部を削除することができますし、
+---+-----------+
|A |B |
+---+-----------+
|1 |3,1/8,2/5,3|
|2 |2,1 |
+---+-----------+
あなたの質問を編集して、データとコードの正しい形式を表示してください。これを強調表示してCtrl + Kを押すことでこれを行うことができます – WhatsThePoint
B列はどのように派生していますか? - その不明確 – jsdeveloper
列ごとのグループA – Deek