gpt4 book ai didi

scala - Spark:加入数组

转载 作者:行者123 更新时间:2023-12-04 13:18:33 26 4
gpt4 key购买 nike

我需要将一个带有字符串列的数据帧连接到一个带有字符串数组的数据帧,以便如果该数组中的值之一匹配,行将被连接。

我试过了,但我猜不支持。
还有其他方法吗?

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

val sparkConf = new SparkConf().setMaster("local[*]").setAppName("test")
val spark = SparkSession.builder().config(sparkConf).getOrCreate()

import spark.implicits._

val left = spark.sparkContext.parallelize(Seq(1, 2, 3)).toDF("col1")
val right = spark.sparkContext.parallelize(Seq((Array(1, 2), "Yes"),(Array(3),"No"))).toDF("col1", "col2")

left.join(right,"col1")


抛出:


org.apache.spark.sql.AnalysisException:无法解析'( = col1)'由于数据
类型不匹配:'( col1 =

col1)'(整数和数组)。

最佳答案

一种选择是创建用于建立连接条件的UDF:

import org.apache.spark.sql.functions._
import scala.collection.mutable.WrappedArray

val left = spark.sparkContext.parallelize(Seq(1, 2, 3)).toDF("col1")
val right = spark.sparkContext.parallelize(Seq((Array(1, 2), "Yes"),(Array(3),"No"))).toDF("col1", "col2")

val checkValue = udf {
(array: WrappedArray[Int], value: Int) => array.contains(value)
}
val result = left.join(right, checkValue(right("col1"), left("col1")), "inner")

result.show

+----+------+----+
|col1| col1|col2|
+----+------+----+
| 1|[1, 2]| Yes|
| 2|[1, 2]| Yes|
| 3| [3]| No|
+----+------+----+

关于scala - Spark:加入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45546189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com