将UUID添加到spark数据集

时间:2018-04-09 14:57:03

标签: apache-spark apache-spark-dataset spark-csv

我正在尝试将UUID列添加到我的数据集中。

getDataset(Transaction.class)).withColumn("uniqueId", functions.lit(UUID.randomUUID().toString())).show(false);

但结果是所有行都具有相同的UUID。我怎样才能使它独一无二?

+-----------------------------------+
uniqueId                            |
+----------------+-------+-----------
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
|1abdecf-8303-4a4e-8ad3-89c190957c3b|
----------+----------------+--------+

1 个答案:

答案 0 :(得分:5)

当您将UUID作为lit列添加时,您可以像包含字符串文字那样做。

需要为每一行生成UUID。您可以使用UDF执行此操作,但是这可能会导致问题,因为UDF应该是确定性的,并且期望来自它们的随机性可能会在缓存或重新发生时导致问题。

您最好的选择可能是使用Spark function rand生成一列,并使用UUID.nameUUIDFromBytes将其转换为UUID。

最初,我有:

val uuid = udf(() => java.util.UUID.randomUUID().toString)
getDataset(Transaction.class).withColumn("uniqueId", uuid()).show(false);
@irbull指出的

可能是一个问题。

相关问题