У меня есть две таблицы / фрейма данных: A
и B
A имеет следующие столбцы: cust_id, purch_date
B имеет один столбец: cust_id, col1
(col1 ненеобходимо)
Следующий пример показывает содержание каждой таблицы:
Table A
cust_id purch_date
34564 2017-08-21
34564 2017-08-02
34564 2017-07-21
23847 2017-09-13
23423 2017-06-19
Table B
cust_id col1
23442 x
12452 x
12464 x
23847 x
24354 x
Я хочу выбрать cust_id
и первый день месяца purch_date
, где выбранные cust_id
не являютсятам в B
.
Это может быть достигнуто в SQL с помощью следующей команды:
select a.cust_id, trunc(purch_date, 'MM') as mon
from a
left join b
on a.cust_id = b.cust_id
where b.cust_id is null
group by cust_id, mon;
Ниже будет вывод:
Table A
cust_id purch_date
34564 2017-08-01
34564 2017-07-01
23423 2017-06-01
Я пробовал следующеечтобы реализовать то же самое в Scala:
import org.apache.spark.sql.functions._
a = spark.sql("select * from db.a")
b = spark.sql("select * from db.b")
var out = a.join(b, Seq("cust_id"), "left")
.filter("col1 is null")
.select("cust_id", trunc("purch_date", "month"))
.distinct()
Но я получаю разные ошибки, такие как:
error: type mismatch; found: StringContext required: ?{def $: ?}
Я застрял здесь и не смог найти достаточно документации / ответов в сети.