gpt4 book ai didi

python - PySpark:一次性在多个列上运行相同的操作

转载 作者:行者123 更新时间:2023-12-01 04:03:31 25 4
gpt4 key购买 nike

我的 DataFrame 包含诸如

之类的行
['row1', 'col_1', 'col_2', 'col_3', ..., 'col_N', 'alpha']

N(除了第一列和最后一列之外的列数)比较大。

现在,我需要通过将名为 col_i 的每个列乘以 alpha 列来创建另一个 DataFrame。有没有比对每一列进行手动乘法更聪明的方法,如下所示:

sc = SparkContext()
sqlc = SQLContext(sc)

sqlc.sql('SELECT col_1 * alpha, col_2 * alpha, ..., col_N * alpha FROM table')

所以我想知道是否可以对每一列执行相同的操作,而无需为每一列专门编写它。

最佳答案

不确定这有多有效,但我可能会这样做:

col_names = df.columns
# start from one to exclude row, end at -1 to exclude alpha column
for x in range(1, len(col_names) - 1):
new_column_name = col_names[x] + "_x_alpha" # get good new column names
df = df.withColumn(new_column_name, (getattr(df, col_names[x]) * getattr(df, col_names[3])))

这将产生与最初相同的数据帧,但具有将每个 column_* 条目乘以 alpha 中的条目的新列。

当我在我的简单示例上运行 df.show() 时,我得到以下输出:

row col_1 col_2 alpha col_1_x_alpha col_2_x_alpha
1 2 3 4 8 12
2 3 4 5 15 20
3 4 5 6 24 30

然后,您可以运行 SQL 查询来仅获取 column_*_x_alpha 类型的列。

关于python - PySpark:一次性在多个列上运行相同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36087990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com