Это мои таблицы:destination
new_data
В Oracle SQL я могу сделать это:
MERGE INTO destination d
USING new_data n
ON (d.c1 = n.c1 AND d.c2 = n.c2)
WHEN MATCHED THEN
UPDATE SET d.d1 = n.d1
WHERE d.d1 IS NULL
WHEN NOT MATCHED THEN
INSERT (c1, c2, d1)
VALUES (n.c1, n.c2, n.d1);
Затем таблица destination
становится такой:
Если c1
, c2
существуют в destination
, а d1
равно null, d1
обновляется.
Если c1
, c2
не существуют, вставляются строки.
Есть ли способ сделать то же самое в PySpark?
Это генерирует кадры данных:
import pyspark
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
spark = SparkSession.builder.getOrCreate()
dCols = ['c1', 'c2', 'd1']
dData = [('a', 'b', 5),
('c', 'd', None)]
destination = spark.createDataFrame(dData, dCols)
nData = [('a', 'b', 1),
('c', 'd', 6),
('e', 'f', 7),
('g', 'h', None)]
new_data = spark.createDataFrame(nData, dCols)
В PySpark есть почти все, что есть в SQL. Но я не нахожу эквивалента для MERGE
.