在squence-scala中连接两个数组列
我有一个带有两个数组列的数据帧,试图通过顺序连接a和B来创建一个新列在squence-scala中连接两个数组列,scala,apache-spark,databricks,Scala,Apache Spark,Databricks,我有一个带有两个数组列的数据帧,试图通过顺序连接a和B来创建一个新列 val df = Seq((Seq("a","b","c"),Seq("d","5","6"))).toDF("A","B") 预期产出: C:[“a d”、“b 5”、“C 6”] 我正在探索这两个数组,并使用“import org.apache.spark.sql.functions.array”函数再次加入它,但它没有给出预期的结果。我认为spark没有现成的函数。您可以在此处使用用户定义的函数zip,例如: impo
val df = Seq((Seq("a","b","c"),Seq("d","5","6"))).toDF("A","B")
预期产出:
C:[“a d”、“b 5”、“C 6”]
我正在探索这两个数组,并使用“import org.apache.spark.sql.functions.array”函数再次加入它,但它没有给出预期的结果。我认为spark没有现成的函数。您可以在此处使用用户定义的函数
zip
,例如:
import spark.implicits._
def zipFunc: (Seq[String], Seq[String]) => Seq[String] = (x: Seq[String], y: Seq[String]) =>
x.zip(y).map{ case (xi, yi) => s"$xi $yi"}
val df = Seq(
(Seq("a","b","c"), Seq("d","5","6"))
).toDF("A","B")
df.printSchema()
val zipUDF = spark.udf.register("zipUdf", zipFunc)
df.withColumn("C", zipUDF($"A", $"B")).show()
印刷品:
+---------+---------+---------------+
| A| B| C|
+---------+---------+---------------+
|[a, b, c]|[d, 5, 6]|[a d, b 5, c 6]|
+---------+---------+---------------+
我认为Spark没有现成的功能。您可以在此处使用用户定义的函数
zip
,例如:
import spark.implicits._
def zipFunc: (Seq[String], Seq[String]) => Seq[String] = (x: Seq[String], y: Seq[String]) =>
x.zip(y).map{ case (xi, yi) => s"$xi $yi"}
val df = Seq(
(Seq("a","b","c"), Seq("d","5","6"))
).toDF("A","B")
df.printSchema()
val zipUDF = spark.udf.register("zipUdf", zipFunc)
df.withColumn("C", zipUDF($"A", $"B")).show()
印刷品:
+---------+---------+---------------+
| A| B| C|
+---------+---------+---------------+
|[a, b, c]|[d, 5, 6]|[a d, b 5, c 6]|
+---------+---------+---------------+
使用arrays_zip函数获得预期结果,如下所示:
import org.apache.spark.sql.functions.arrays_zip
val output = df.withColumn(
"zipped", arrays_zip($"A", $"B")
)
使用arrays_zip函数获得预期结果,如下所示:
import org.apache.spark.sql.functions.arrays_zip
val output = df.withColumn(
"zipped", arrays_zip($"A", $"B")
)
它在示例中工作得很好,但是当我替换表的列时,我得到了一个不可序列化的任务error@VSr我更新了答案,但您的决定更好。它在示例中运行良好,但当我替换表中的列时,我得到的任务不可序列化error@VSr我更新了答案,但你的决定更好。