Я пытаюсь условно объединить эти два набора данных с помощью функции joinConditional ниже. Я нашел аналогичное описание для кода scala, но для Python я не могу заставить его работать. Он продолжает выдавать ошибку «Столбец не повторяется». Я новичок в Pyspark и мог бы использовать некоторую помощь.
Вот фрейм данных dfviol
+------+------+
|Number|Letter|
+------+------+
| 5| a|
| 2| b|
| 3| c|
| 6| a|
| 7| b|
+------+------+
вот фрейм данных dfcent
+---+------+-----------------+------------------+------------------+-------------------+
| ID|Letter|Num_range_low_odd|Num_range_high_odd|Num_range_low_even|Num_range_high_even|
+---+------+-----------------+------------------+------------------+-------------------+
| 1| a| 1| 5| 6| 10|
| 2| a| 7| 9| 0| 4|
| 3| a| 11| 15| 10| 14|
| 4| b| 1| 5| 0| 4|
| 5| b| 7| 9| 6| 10|
| 6| c| 1| 5| 0| 4|
| 7| c| 7| 9| 6| 10|
| 8| c| 11| 15| 10| 14|
+---+------+-----------------+------------------+------------------+-------------------+
Идея в том, что для объединяя два кадра данных, я собираюсь использовать номер в dfviol, и если он даже использует четную сторону dfcent для объединения кадров, если это не так, я буду использовать нечетный.
это то, что У меня так далеко, но говорится, что столбец не повторяется.
joinCondition = when(dfviol.Number%2== 0, [dfcent.Num_range_low_even <= dfviol.Number,dfcent.Num_range_high_even >= dfviol.Number]).otherwise([dfcent.Num_range_low_odd <= dfviol.Number,dfcent.Num_range_high_odd >= dfviol.Number])
df_full = dfviol.join(dfcent,[dfviol.Letter == dfcent.Letter, joinCondition], how='inner')
df_full.show()
Я не уверен, что я делаю неправильно, любая помощь будет fantasti c