我有两个数据帧,如果一个列值匹配第二个df列值过滤onmatch列行

时间:2018-02-08 12:47:40

标签: scala apache-spark apache-spark-sql

我这里有两个数据框:df1在这里

id name
11 abc
12 cdf
13 mmm
14 hhh

df2在这里:

id status
11 1
12 1
13 0

我需要的是df1 id匹配df2 id然后状态0我已过滤df1中的完整行,如下所示

id name
11 abc
12 cdf

2 个答案:

答案 0 :(得分:0)

您可以按ID加入它们,然后按状态值过滤并删除最后一个列

scanl (flip move)

逐行:

join =>按 val joined = df1.join(df2, "id") .filter($"status" !== 0) .drop("status") 加入两个dataFrame,结果将同时包含id和名称status(显然除columns之外)
filter =>只保留与谓词匹配的行。在这种情况下,id column不是0的那些 drop =>删除status列,因为在最终输出中不需要它

输出是:

status

答案 1 :(得分:0)

我建议0 status df2列中的select iddf1 val tempDF2 = df2.filter($"status" =!= "0").select("id") df1.join(tempDF2, Seq("id")).show(false) +---+----+ |id |name| +---+----+ |11 |abc | |12 |cdf | +---+----+ {1}}列内部加入svn log这比在加入后过滤后的性能更好。

awk

你应该输出

REPO_URL=https://<hostname>/path/to/repo
FILENAME=/path/to/file

svn log ${REPO_URL} -v --search "${FILENAME}" | \
    awk -v var="^   [D] ${FILENAME}$" \
    '/^r[0-9]+/{rev=$1}; \
    $0 ~ var {print rev $0}'