【问题标题】:Create a version column based on hash column基于哈希列创建版本列
【发布时间】:2021-11-23 17:18:53
【问题描述】:

我想向 myDF 添加一个版本列,其中放置我的 Hash 列的版本。我的DF:

   Hash    Code   P1  P2  P3  P4  P5... Pn
x-x-1-x-x    A    x   x   1   x   x
x-1-x-x-x    A    x   1   x   x   x
5-x-1-x-x    A    5   x   1   x   x
x-x-1-x-2    A    x   x   1   x   2
x-x-1-x-x    A    x   x   1   x   x
x-x-x-7-x    A    x   x   x   7   x
5-x-1-x-x    A    5   x   1   x   x

我需要:

Version    Hash    Code   P1  P2  P3  P4  P5... Pn
  1     x-x-1-x-x    A    x   x   1   x   x
  2     x-1-x-x-x    A    x   1   x   x   x
  3     5-x-1-x-x    A    5   x   1   x   x
  4     x-x-1-x-2    A    x   x   1   x   2
  1     x-x-1-x-x    A    x   x   1   x   x
  6     x-x-x-7-x    A    x   x   x   7   x
  3     5-x-1-x-x    A    5   x   1   x   x

我正在使用 PySpark,不知道是否存在可以帮助我的方法。

编辑: 我需要的版本列应该考虑哈希列。流程应该是:

读取Hash值,是否存在于前行?然后放入之前分配的版本值。 版本值就像一个 ID,可以重复哈希,如果是,我需要知道该版本并放入我正在阅读的那一行。除非我需要创建一个新版本(id)最后一个值版本 +1。

【问题讨论】:

  • 包含有关如何计算版本列的说明,以便社区可以帮助您。
  • @snithish 你是对的,我没有解释得很好。我希望现在可以理解了:)
  • 如果数据集被洗牌,带有哈希x-x-1-x-x 的行第一次出现在第 4 行,它仍然有版本 1 吗?如果是,那么编号的依据是什么?
  • 哈希列它创建的连接其余列(P1、P2、P3、... Pn)。它们是参数列,我创建了哈希列,我想要有版本并识别是否有哈希,之前出现的参数配置。

标签: python dataframe pyspark


【解决方案1】:
df = sqlContext.createDataFrame(
  [
     ('x-x-1-x-x','A', 'x', 'x', '1', 'x', 'x'),
     ('x-1-x-x-x','A', 'x', '1', '1', 'x', 'x'),
     ('5-x-x-x-x','A', '5', 'x', 'x', 'x', 'x'),
     ('x-x-1-x-2','A', 'x', 'x', '1', 'x', '2'),
     ('x-x-1-x-x','A', 'x', 'x', '1', 'x', 'x'),
     ('x-x-x-7-x','A', 'x', 'x', 'x', '7', 'x'),
     ('5-x-x-x-x','A', '5', 'x', '1', 'x', 'x')
  ]
  ,['Hash', 'Code', 'P1', 'P2', 'P3', 'P4', 'P5']
)




from pyspark.sql import functions as F

Hash_ids = df\
            .select("Hash")\
            .dropDuplicates()\
            .rdd.zipWithIndex()\
            .toDF()\
            .withColumn("Version", F.col('_2')+1)\
            .select(F.col("_1.*"), F.col("Version"))

df\
  .join(Hash_ids, 'Hash', 'inner')\
  .show()

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 2021-06-19
    • 2012-09-18
    • 1970-01-01
    • 2011-11-08
    • 2021-10-06
    • 2013-12-20
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多