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



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

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

但是我有一个单独的文本文件,其中包含一列CUST_ID和50,000行。例如

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

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

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|
+---+----+--------------+

相关内容

  • 没有找到相关文章