Apache spark Spark:对可变长度的特性进行标签编码的最佳方法是什么?

Apache spark Spark:对可变长度的特性进行标签编码的最佳方法是什么?,apache-spark,label-encoding,Apache Spark,Label Encoding,对于Spark,Spark ML中有一个StringIndexer,可以对给定列进行标签编码。但是,它不能直接处理列为可变长度特征(或多值特征)的情况。比如说, +-------+--------------------+--------------------+--------------------+--------------------+ | jobid| country_list| typeofwork_list| publish|

对于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\u列表
typeofwork\u列表
列是长度可变的功能。它们可以在一列中包含多个值,并且值的数量是可变的。当我想对它们进行标签编码时,我不能直接在这些列上使用
StringIndexer

country\u list
列为例,我需要的结果如下:

+--------------------+
|        country_list|
+--------------------+
|0;1;2;3...          |
|0;1;4;3...          |
|5;1;2;3...          |
|0;1;2;3...          |
在Spark中对此类列进行标签编码的最佳方法是什么?

我想到的一种方法是首先将
国家/地区列表分解成一个单列数据帧,然后在此临时数据帧上进行标签编码(
StringIndexer
)。在那之后,
dropDulicate
,然后
collect
it,现在我应该有映射了。 然后我可以
将映射广播到所有工作机器。原始数据帧可以使用一个
UDF
,它包装映射以转换
country\u列表
列。我想知道有没有更简单的方法

多谢各位