のは、あなたのデータは、このようなものですとしましょう:
val df = spark.sqlContext.createDataFrame(Seq(
(Array("a"), Array("b"))
)).toDF("ColA", "ColB")
df.printSchema()
df.show()
root
|-- ColA: array (nullable = true)
| |-- element: string (containsNull = true)
|-- ColB: array (nullable = true)
| |-- element: string (containsNull = true)
+----+----+
|ColA|ColB|
+----+----+
| [a]| [b]|
+----+----+
existing set of Spark SQL functionsは、アレイ(または列)のための連結機能を持つように表示されません。私は文字列のためのconcat
関数を見るだけです。しかし、あなたは、単純なユーザー定義関数(UDF)を作成することができます
import org.apache.spark.sql.functions.udf
val concatSeq = udf { (x: Seq[String], y: Seq[String]) => x ++ y }
val df2 = df.select(concatSeq('ColA, 'ColB).as("ColAplusB"))
df2.printSchema()
df2.show()
root
|-- ColAplusB: array (nullable = true)
| |-- element: string (containsNull = true)
+---------+
|ColAplusB|
+---------+
| [a, b]|
+---------+
あなたは(例えば重複を削除、並べ替え)あなたのUDFで行うことができます実行したい余分なロジック:
val df = spark.sqlContext.createDataFrame(Seq(
(Array("b", "a", "c"), Array("a", "b"))
)).toDF("ColA", "ColB")
df.show()
+---------+------+
| ColA| ColB|
+---------+------+
|[b, a, c]|[a, b]|
+---------+------+
val concatSeq = udf { (x: Seq[String], y: Seq[String]) =>
(x ++ y).distinct.sorted
}
df.select(concatSeq('ColA, 'ColB).as("ColAplusB")).show()
+---------+
|ColAplusB|
+---------+
|[a, b, c]|
+---------+
検索について「フラット・アレイ/コレクション」と呼ばれています。私はスパークを知らないが、私はそれがカスタムコードなしで実行可能でなければならないと信じている。 – lad2025
私は、フラットニングはそれを行ごとに単一の値に減らすと信じています。これは正確には私が探しているものではありません。 'explode'はそれを行いますが、すべての値を1つの配列に戻す方法がわかりません。 – 3yakuya
私は 'flatten(array(ColA、ColB))'のようなものを意味します。 – lad2025