как получить только новые записи, доступные в одном фрейме данных, а не в другом, используя pyspark? - PullRequest
0 голосов
/ 06 октября 2018

У меня есть два dataframe-df1 и df2.df1 состоит из 70 строк и 7 столбцов, а df2 состоит из 80 строк и 7 столбцов.

Как выбрать только те записи из df2, которые имеют любые новые значения записей во всех столбцах относительно df1, то есть значение записине существует в df1 в pyspark-2.2.0?

Я пытался использовать этот метод запроса левого соединения, но не смог выполнить его в sqlContext.sql ().

sqlContext.sql(
select df2.*,df1.* from df2 
left join (select * from df1)
on (df2.col1=df1.col1 
AND df2.col2=df1.col2
AND df2.col3 =df1.col3 
AND df2.col4=df1.col4
AND df2.col5=df1.col5
AND df2.col6=df1.col6
AND df2.col7=df1.col7) 
where df1.col1 is null 
AND df1.col2 is null 
AND df1.col3 is null
AND df1.col4 is null
AND df1.col5 is null
AND df1.col6 is null
AND df1.col7 is null).show()

1 Ответ

0 голосов
/ 06 октября 2018

Используйте метод вычитания метки кадра [1].Пример:

l1 = [(1,2),(3,4),(5,6), (12,537)]
l2 = [(1,2),(3,4),(5,6), (7,8), (9,10), (12,537)]
df1 = spark.createDataFrame(l1,['col1','col2'])
df2 = spark.createDataFrame(l2,['col1','col2'])

result = df2.subtract(df1)
result.show()
+----+----+ 
|col1|col2|
+----+----+ 
| 7  | 8  |
| 9  | 10 |
+----+----+

[1] https://spark.apache.org/docs/1.3.0/api/python/pyspark.sql.html?highlight=dataframe#pyspark.sql.DataFrame.subtract

...