当前位置: 首页 > 知识库问答 >
问题:

创建Spark行的128位散列,存储为新列

空佐
2023-03-14

我需要向dataFrame中添加一列,该列是每行的哈希。目标是使用此哈希来唯一标识该行。我将有超过100000000行,这就是为什么散列需要如此大。我知道内置的spark哈希,但不幸的是,它只有32位,并且会导致大量哈希冲突。我如何才能做到这一点?

共有1个答案

仇阳州
2023-03-14

您可以使用内置的< code>md5函数,因为它是128位的。但是它不接受多个参数,所以必须将这些值< code >串联在一起。还需要处理不同的数据类型和空值。

import org.apache.spark.sql.functions.{col, md5, concat, cast, lit}

val tab_w_hash = tab.withColumn("hash128", md5(concat(tab.columns.map(x => coalesce(col(x).cast("string"),lit(""))) : _*)))
 类似资料:
  • 我有如下数据集: 这是我们数据库中每个帐户的备忘录集合。“1abc”中的1表示帐户ID,字母表示一些文本。总共有177列和1866行,但并非每行都有177列之前的值,有些行可能只有两列数据。 我需要每一列下拉到A列的底部,以便所有数据只占用A列。例如,B列中的所有数据都将插入A列中的最后一个值之后。C列中的数据将插入A列中的最后一个值之后,它已填充了来自B的数据,依此类推。 最后,它应该是这样的(

  • 假设我有一个1.2 GB的文件,那么考虑到128 MB的块大小,它将创建10个分区。现在,如果我将其重新分区(或合并)为4个分区,这意味着每个分区肯定会超过128 MB。在这种情况下,每个分区必须容纳320 MB的数据,但块大小是128 MB。我有点糊涂了。这怎么可能?我们如何创建一个大于块大小的分区?

  • 假设我有这样一个数据frame: 我希望创建另一个dataframe,在每行中从左到右显示关系,同时跳过具有空值的列。此外,只有1个有效列记录的行将被排除。例如: 我认为方法应该是编写一个包含此逻辑的UDF,但我不完全确定如何返回一个全新的DF,因为我习惯了UDF只是在同一个DF中创建另一列。或者是否有另一个spark函数可以比创建UDF更容易地处理这种情况?如果有关系,就使用pyspark。

  • 问题内容: 我们有大量的应用程序,其中我们以JSON的形式从远程Web服务中获取数据,然后使用解析器将其转换为Core-Data模型。 对于我们的一个应用程序,我认为我们应该做一些不同的事情。 此应用程序具有 只读数据* ,该 数据 易失 ,因此 不会在本地缓存很长时间 。JSON 具有 大量嵌套的“对象” 层次结构 。文档通常包含不超过20个顶级项目,但最多可以包含10万个。 * 我不认为我想创

  • 我需要你的一些建议。我试图用redis和哈希(redis类型)存储一些非常有效的内存数据。有一些随机字符串列表(在rfc中平均大小是40个字符,但最大可能是255个字符)--它是文件id,例如我们有100kk的file_id列表。我们还需要每个ID的轨道2参数:download_count(int,incremented)和server_id--tiny int,redis config添加了:

  • 问题内容: 我们基于Web的应用程序使用在帐户创建期间指定的密码将用户帐户绑定到用户。对于Java,在将密码的哈希值保留在数据库中之前,如何安全地处理密码。 更具体地说,如何确保在足够短的时间间隔内对收集密码的字符串进行垃圾回收? 问题答案: 如果有可能(在Web应用程序中可能很困难),将密码存储在字符数组中比将其存储在字符串中更好。如果完成了密码的存储,则可以使用Array.fill()将其覆盖