【问题标题】:PySpark: Pass value as suffix to dataframe namePySpark:将值作为后缀传递给数据框名称
【发布时间】:2021-09-09 14:24:07
【问题描述】:

我有一个 PySpark 数据框 df 并想添加一个“迭代后缀”。对于每次迭代,counter 应增加 1 并作为后缀添加到数据帧名称。出于测试目的,我的代码如下所示:

counter = 1
def loop:
    
    counter = counter + 1
    df_%s = df.select('A','B') % counter

这里有2个问题:我不知道如何设置计数器变量,因为这个版本遇到错误('局部变量'counter'在赋值之前引用')并且我不知道如何正确传递当前数据框名称的计数器值。感谢您的帮助!

【问题讨论】:

  • 存储这样的信息有什么必要?看起来需要对您的数据框进行历史记录,我建议您使用一个专用数据框和一个允许识别值的列,可能是日期
  • 是的,我需要在 12 个月内循环执行相同的操作。虽然这可能不是 PySpark 中最好的程序,但我真的很想知道如何做到这一点,因为我来自 SAS,需要将一些 SAS 脚本转换为 Python (PySpark)。
  • 我了解,但我不知道是否存在这种语法最好的情况。不幸的是,我不知道如何进行,也不知道是否可行

标签: python pyspark


【解决方案1】:

给定以下数据框

+---+------+-----+
|  A|     B|    C|
+---+------+-----+
|  1|   Red| 5.52|
|  2|  Blue| 1.99|
|  3| Green| 3.71|
|  4|Purple|12.09|
+---+------+-----+

您可以通过以下方式获得结果

for i in range(0, 9):
    globals()['df_{}'.format(i)] = df.select("A","B")

现在您有 10 个不同的数据帧可供操作

from pyspark.sql import functions

df_1 = df_1.withColumn("test", functions.lit(1))
df_1.show()

+---+------+----+
|  A|     B|Test|
+---+------+----+
|  1|   Red|   1|
|  2|  Blue|   1|
|  3| Green|   1|
|  4|Purple|   1|
+---+------+----+

df_2.show()
+---+------+
|  A|     B|
+---+------+
|  1|   Red|
|  2|  Blue|
|  3| Green|
|  4|Purple|
+---+------+

#and so on..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多