Мне нужно объединить два кадра данных вместе, чтобы добавить данные столбца, если они есть, и они ведут себя не так, как я ожидал.
ДФА:
# +---+-----+-----+
# | id|d_var|d_val|
# +---+-----+-----+
# |a01| 112| null|
# |a01| 113| 0|
# |a02| 112| null|
# |a02| 113| 0|
# +---+-----+-----+
ДФБ:
# +---+-----+-----+------+-----+
# | id|d_var|d_val|c_type|c_val|
# +---+-----+-----+------+-----+
# |a01| 112| null| red| 1|
# |a01| 113| 0| red| 1|
# +---+-----+-----+------+-----+
Вот создание фрейма данных и вызов присоединения, который ведет себя неожиданно:
dfA = spark.createDataFrame(
[
('a01', '112', None),
('a01', '113', '0'),
('a02', '112', None),
('a02', '113', '0')
],
('id', 'd_var', 'd_val')
)
dfB = spark.createDataFrame(
[
('a01', '112', None, 'red', '1'),
('a01', '113', '0', 'red', '1')
],
('id', 'd_var', 'd_val', 'c_type', 'c_val')
)
static_cols = dfB.columns[:3]
dfA.join(dfB, static_cols, how='left').orderBy('id', 'd_var').show()
Выход:
# +---+-----+-----+------+-----+
# | id|d_var|d_val|c_type|c_val|
# +---+-----+-----+------+-----+
# |a01| 112| null| null| null| <-
# |a01| 113| 0| red| 1|
# |a02| 112| null| null| null|
# |a02| 113| 0| null| null|
# +---+-----+-----+------+-----+
Ожидаемый (и желаемый) результат:
# +---+-----+-----+------+-----+
# | id|d_var|d_val|c_type|c_val|
# +---+-----+-----+------+-----+
# |a01| 112| null| red| 1| <-
# |a01| 113| 0| red| 1|
# |a02| 112| null| null| null|
# |a02| 113| 0| null| null|
# +---+-----+-----+------+-----+
nullв соединении. Поскольку вы находитесь на2.3.0, взгляните на этот ответ относительноColumn.eqNullSafeвPySpark. - person Travis Hegner   schedule 13.06.2018