Spark: Каков наилучший способ кодирования меток для объекта переменной длины? - PullRequest
2 голосов
/ 03 марта 2020

Для Spark в Spark ML есть StringIndexer, который может выполнять кодирование меток для данного столбца. Однако он не может напрямую обработать ситуацию, когда столбец имеет значение переменной длины (или многозначного элемента) . Например,

+-------+--------------------+--------------------+--------------------+--------------------+
|  jobid|        country_list|     typeofwork_list|             publish|              expire|
+-------+--------------------+--------------------+--------------------+--------------------+
|1636051|USA;Spain;China;A...|1441;1442;1443      |27/03/2017 2:00:0...|3/04/2017 1:59:59 PM|
|1636052|USA;Spain;Japan;A...|1441;1442           |27/03/2017 2:00:0...|3/04/2017 1:59:59 PM|
|1636053|UK;Spain;China;A....|1442;1443           |27/03/2017 2:00:0...|3/04/2017 1:59:59 PM|
|1636054|USA;Spain;China;A...|1443                |27/03/2017 2:00:0...|3/04/2017 1:59:59 PM|

Столбцы country_list и typeofwork_list являются объектами переменной длины. Они могут иметь более одного значения в одном столбце, и число значений является вариантом. Когда я хочу сделать кодировку надписей на них, я не могу использовать StringIndexer непосредственно для этих столбцов.

Если взять, например, столбец country_list, то что-то вроде следующего - это результат, который мне нужен:

+--------------------+
|        country_list|
+--------------------+
|0;1;2;3...          |
|0;1;4;3...          |
|5;1;2;3...          |
|0;1;2;3...          |

Каков лучший способ кодирования меток для таких столбцов в Spark?

Один из способов, которым я считаю, - сначала explode country_list в один столбец фрейм данных, затем выполните кодирование метки (StringIndexer) для этого временного фрейма данных. После этого dropDulicate, затем collect это, теперь у меня должно быть отображение. Затем я могу broadcast сопоставить все рабочие машины. Исходный Dataframe может использовать UDF, который оборачивает отображение для преобразования столбца country_list. Мне интересно, есть ли более простые способы сделать это?

Спасибо.

...