2016-12-01 75 views
0

我有一个数据帧筛选行不存在在列表的字符串或不

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

我想筛选行已不在列表中。 我可以过滤基于年龄和ID很容易 -

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

似乎是一个语法错误。 尝试:

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

试图逃跑SQL查询:

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