我使用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|
+---+----+--------------+