【发布时间】:2019-02-17 16:47:45
【问题描述】:
我有两个数据框,每个数据框大约有一百万条记录,我希望根据列与另一个 df 中的列部分匹配,将 True 或 false 附加到 df1 上的每一行。
我考虑过编写一个 UDF,然后比较两列中的字符串,但它不起作用
var df1 = spark.read.format("csv").option("header", "true").option("delimiter", "\t").load("hdfs://XXXXX.txt")
var df2 = spark.read.format("csv").option("header", "true").option("delimiter", "\t").load("YYYYYYY.txt")
var desc =df2.select("SHORT_DESC").map(_.getString(0)).collect.toList
var desc_str = desc.mkString(" ")
def matchBoth(s:String ,s1: String) : Boolean ={
if(s1.contains(s)) true
else false
}
var contains = udf(matchBoth _)
var df3=df1.withColumn("flag",contains(lower($"Col45"),lit(desc_str.toLowerCase)))
【问题讨论】:
-
您的数据集有多大,什么是“长期”?你得到结果了吗?
-
我的数据集有 200 万条记录,我之前没有得到任何结果。 Gorros 的建议对我有用。
标签: scala apache-spark