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