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示例。。。