Определяет ли Spark MapType c, то есть правильно ли сопоставлены пары ключ-вал при ручном разнесении с использованием map_keys / map_values? - PullRequest
2 голосов
/ 14 апреля 2020

Является ли порядок карты в Spark детерминированным c?

Другими словами, если бы я позвонил:

df = spark.createDataFrame(
    [[{"a": 1, "b": 2}]],
    ["dictionary_col"]
)

df.select(
    F.map_keys("dictionary_col"),
    F.map_values("dictionary_col"),
)

Могу ли я получить что-то вроде

_key___|___value_
[a,b]  | [1,2]

или

_key___|___value_
[b,a]  | [2,1]

Или есть вероятность того, что словарь будет «зашифрован» между map_keys и вызовом map_values, что приведет к несоответствию в ключе / значении?

_key___|___value_
[a,b]  | [2,1]

Например, это может быть потенциальная проблема c Выполнить: пример потенциальной проблемы c Выполнить:

{ a: 1, b: 2 } --> getKeys --> [a, b]
<shuffle> <---node crashes, reloads data --> { b:2, a:1 }
{ b:2, a:1 } --> getVals --> [2, 1]

1 Ответ

1 голос
/ 15 апреля 2020

Методы map_keys и map_values не гарантируют порядок ключей и значений, которые они возвращают. Эти два метода документированы только для "[r] etur [n] неупорядоченного массива, содержащего ключи [или значения, соответственно] карты" (выделение добавлено). Таким образом, даже нет гарантии, что порядок ключей и значений будет соответствовать порядку их пар ключ-значение на карте, даже если это может выглядеть так в текущей версии Spark.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...