Use*_*Adi 3 apache-spark spark-csv apache-spark-dataset
我正在尝试将UUID列添加到我的数据集中。
getDataset(Transaction.class)).withColumn("uniqueId", functions.lit(UUID.randomUUID().toString())).show(false);
Run Code Online (Sandbox Code Playgroud)
但是结果是所有行都具有相同的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|
----------+----------------+--------+
Run Code Online (Sandbox Code Playgroud)
当您将UUID包含在lit列中时,您所做的与包含字符串文字的操作相同。
需要为每一行生成UUID。您可以使用UDF进行此操作,但是这可能会引起问题,因为UDF应该是确定性的,并且期望它们的随机性会在缓存或重新生成发生时引起问题。
最好的选择可能是使用Spark函数rand生成一列并将UUID.nameUUIDFromBytes其转换为UUID。
最初,我有:
val uuid = udf(() => java.util.UUID.randomUUID().toString)
getDataset(Transaction.class).withColumn("uniqueId", uuid()).show(false);
Run Code Online (Sandbox Code Playgroud)
这@irbull指出,可能是一个问题。
| 归档时间: |
|
| 查看次数: |
4025 次 |
| 最近记录: |