【问题标题】:Loop 3 times and add a new value each time to a new column in spark DF循环 3 次,每次向 spark DF 中的新列添加一个新值
【发布时间】:2021-01-11 16:57:51
【问题描述】:

我想为 pysaprk DF 中的每一行创建 3 行。我想添加一个名为 loopVar=(val1,val2,val3) 的新列。必须在每个循环中添加三个不同的值作为值。知道我该怎么做吗?

原文:

    a   b   c
    1   2   3
    1   2   3

 Condition 1: loop = 1  and b is not null then loopvar =va1
 Condition 2: loop = 2  and b is not null then loopvar =va2
 Condition 3: loop = 3  and c is not null then loopvar =va3

输出:

    a   b   c  loopvar
    1   2   3  val1
    1   2   3  vall
    1   2   3  val2
    1   2   3  val2
    1   2   3  val3
    1   2   3  val3

【问题讨论】:

  • 您要创建行还是添加列,还是两者兼而有之?请提供输入和预期输出。
  • 已经说明了现有的和需要的输出状态。

标签: apache-spark pyspark


【解决方案1】:

使用crossJoin

df = spark.createDataFrame([[1,2,3], [1,2,3]]).toDF('a','b','c')
df.show()
+---+---+---+
|  a|  b|  c|
+---+---+---+
|  1|  2|  3|
|  1|  2|  3|
+---+---+---+

df2 = spark.createDataFrame([['val1'], ['val2'], ['val3']]).toDF('loopvar')
df2.show()
+-------+
|loopvar|
+-------+
|   val1|
|   val2|
|   val3|
+-------+

df3 = df.crossJoin(df2)
df3.show()
+---+---+---+-------+
|  a|  b|  c|loopvar|
+---+---+---+-------+
|  1|  2|  3|   val1|
|  1|  2|  3|   val2|
|  1|  2|  3|   val3|
|  1|  2|  3|   val1|
|  1|  2|  3|   val2|
|  1|  2|  3|   val3|
+---+---+---+-------+

【讨论】:

  • 是的,这部分是我正在寻找的。但对不起,我添加了另一个条件。再次抱歉转移目标。
  • 实际上,您知道一旦实现了交叉连接,然后使用 .withColumn 我可以单独锻炼条件。但是,如果您有我所想的更优雅的解决方案,请分享。
  • @SuhasRajashekar 听起来很合理
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
相关资源
最近更新 更多