如何在Spark中使用CSV文件中的NOT IN

时间:2016-11-10 17:57:35

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

我使用Spark sql将数据加载到像这样的val

val customers = sqlContext.sql("SELECT * FROM customers")

但我有一个单独的txt文件,其中包含一列CUST_ID和50,00行。即

CUST_ID
1
2
3

我希望我的customers val让customers表中的所有客户都不在TXT文件中。

使用Sql我会通过SELECT * FROM customers NOT IN cust_id ('1','2','3')

执行此操作

我怎样才能使用Spark?

我已经阅读了textFile并且我可以打印它的行但我不确定如何将它与我的sql查询相匹配

scala> val custids = sc.textFile("cust_ids.txt")
scala> custids.take(4).foreach(println)
CUST_ID
1
2
3

1 个答案:

答案 0 :(得分:3)

您可以将文本文件作为数据框导入并执行左外连接:

val customers = Seq(("1", "AAA", "shipped"), ("2", "ADA", "delivered") , ("3", "FGA", "never received")).toDF("id","name","status")
val custId = Seq(1,2).toDF("custId")

customers.join(custId,'id === 'custId,"leftOuter")
         .where('custId.isNull)
         .drop("custId")
         .show()


+---+----+--------------+
| id|name|        status|
+---+----+--------------+
|  3| FGA|never received|
+---+----+--------------+