scala中数据帧连接中字符串函数的使用

scala中数据帧连接中字符串函数的使用,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在尝试连接两个数据帧,条件类似于“Hello World”中的“Wo”,即(dataframe1 col包含dataframe2 col1值) 在HQL中,我们可以使用instr(t1.col1,t2.col1)>0 如何在Scala的Dataframe中实现相同的条件?我试过了 df1.join(df2,df1("col1").indexOfSlice(df2("col1")) > 0) 但它给了我下面的错误 错误:值indexOfSlice不是的成员 org.apache.spa

我正在尝试连接两个
数据帧
,条件类似于“Hello World”中的“Wo”,即(dataframe1 col包含dataframe2 col1值)

在HQL中,我们可以使用
instr(t1.col1,t2.col1)>0

如何在Scala的Dataframe中实现相同的条件?我试过了

df1.join(df2,df1("col1").indexOfSlice(df2("col1")) > 0)
但它给了我下面的错误

错误:值indexOfSlice不是的成员 org.apache.spark.sql.Column

我只想使用DataFrames实现下面的hql查询

select t1.*,t2.col1 from t1,t2 where instr(t1.col1,t2.col1)>0

使用spark 2.2测试以下溶液。您需要定义一个
UDF
,并且您可以指定一个连接条件作为
的一部分,其中
过滤器:

val indexOfSlice_ = (c1: String, c2: String) => c1.indexOfSlice(c2)
val islice = udf(indexOfSlice_)

val df10: DataFrame = Seq(("Hello World", 2), ("Foo", 3)).toDF("c1", "c2")
val df20: DataFrame = Seq(("Wo", 2), ("Bar", 3)).toDF("c3", "c4")

df10.crossJoin(df20).where(islice(df10.col("c1"), df20.col("c3")) > 0).show
// +-----------+---+---+---+
// |         c1| c2| c3| c4|
// +-----------+---+---+---+
// |Hello World|  2| Wo|  2|
// +-----------+---+---+---+
PS:当心!使用交叉联接是一个昂贵的操作,因为它会产生笛卡尔联接


<强>编辑:当您想使用此解决方案时考虑阅读。

首先,这是一个特定于SARK的问题,它应该被标记为。其次,你在做什么还不是很清楚。您是否确实在尝试使用条件执行交叉联接?你不介意展示一个MVCE,这样我们就可以试着帮助你了吗?错误是显而易见的thought@eliasah是的,我正在尝试交叉连接。我将在问题中添加sql示例。。。