根据List Of String中不存在的列值过滤行

时间:2016-12-01 14:28:32

标签: apache-spark spark-dataframe

我有一个数据框

var input1 = spark.createDataFrame(Seq(
        (10L, "Joe Doe", 34),
        (11L, "Jane Doe", 31),
        (12L, "Alice Jones", 25)
        )).toDF("id", "name", "age")

我正在尝试过滤列表中不可用的行。 我可以根据年龄和身份轻松过滤 -

input1.filter("age not in (31,56,81)").show()

但是当我尝试根据名称

进行过滤时,同样不起作用
input1.filter("name not in ("joe Doe","Pappu cam","Log")").show()

过滤时必须有一些字符串表示。

我正在异常

org.apache.spark.sql.catalyst.parser.ParseException:
extraneous input 'Doe' expecting {')', ',', '.', '[', 'OR', 'AND', 'IN', NOT, 'BETWEEN', 'LIKE', RLIKE, 'IS', EQ, '<=>', '<>', '!=', '<', LTE, '>', GTE, '+', '-', '*', '/', '%', 'DIV', '&', '|', '^'}(line 1, pos 16)
== SQL ==
name not in (Joe Doe,abc dej)
----------------^^^

2 个答案:

答案 0 :(得分:2)

似乎是语法错误。 尝试:

input1.filter("name not in ('joe Doe','Pappu cam','Log')").show()

答案 1 :(得分:1)

尝试转义SQL查询:

input1.filter(s"""name not in ("joe Doe","Pappu cam","Log")""").show()