генерировать ключ ha sh (столбец уникального идентификатора в кадре данных) в кадре данных spark - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть таблица, состоящая из> 100 тысяч строк. Мне нужно создать уникальный идентификатор из объединенных столбцов, которые будут уникальными. Я пробовал функцию md5, которая отлично работает для меньшего количества данных, но для огромных значений данных дублируется. Можете ли вы предоставить какое-либо альтернативное решение или как сделать так, чтобы оно соответствовало 100 000 строк данных.

val df = Seq(
              ("Veg", "tomato", 1.99),
              ("Veg", "potato", 0.45),
              ("Fruit", "apple", 0.99),
              ("Fruit", "pineapple", 2.59)
               ).toDF("Type", "Item", "Price")

df.withColumn("hash_value",md5(concat($"Type",$"Item",$"Price"))).show(false)

+-----+---------+-----+--------------------------------+
|Type |Item     |Price|hash_value                      |
+-----+---------+-----+--------------------------------+
|Veg  |tomato   |1.99 |82215bc9c2078d2f1e773ad62b4f88c6|
|Veg  |potato   |0.45 |5c68bcadcbfdedf8b8c6edca20fd5126|
|Fruit|apple    |0.99 |830a70f1c16f015aa54ca24d9ea6ce0b|
|Fruit|pineapple|2.59 |1f0974817391905d41224e76735fc5d4|
+-----+---------+-----+--------------------------------+

Как создать уникальный идентификатор для объединенного столбца?

1 Ответ

1 голос
/ 19 февраля 2020

Я советую вам sha 256 или 512, чтобы избежать коллизий:

df.withColumn(
    "hash_value",
    F.sha2(
        F.concat(*(
            F.col(col).cast("string")
            for col 
            in df.columns
        )),
        256
    )
).show()
...