Python PySpark:一次性在多个列上运行相同的操作
My DataFramePython PySpark:一次性在多个列上运行相同的操作,python,sql,select,dataframe,pyspark,Python,Sql,Select,Dataframe,Pyspark,My DataFrame表包含以下行: ['row1', 'col_1', 'col_2', 'col_3', ..., 'col_N', 'alpha'] N(除第一列和最后一列外的列数)相对较大 现在,我需要通过将这些名为col_I的列乘以columnalpha来创建另一个数据帧。有没有比对每一列进行手动乘法更聪明的方法,如: sc = SparkContext() sqlc = SQLContext(sc) sqlc.sql('SELECT col_1 * alpha, col_2 *
表
包含以下行:
['row1', 'col_1', 'col_2', 'col_3', ..., 'col_N', 'alpha']
N(除第一列和最后一列外的列数)相对较大
现在,我需要通过将这些名为col_I
的列乘以columnalpha
来创建另一个数据帧。有没有比对每一列进行手动乘法更聪明的方法,如:
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])))
这将产生与原来相同的数据帧,但新的列会将每个列*
条目乘以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\u*\ ux\ualpha
的列