Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySpark:一次性在多个列上运行相同的操作_Python_Sql_Select_Dataframe_Pyspark - Fatal编程技术网

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

Python 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 *

My DataFrame
包含以下行:

['row1', 'col_1', 'col_2', 'col_3', ..., 'col_N', 'alpha']
N(除第一列和最后一列外的列数)相对较大

现在,我需要通过将这些名为
col_I
的列乘以column
alpha
来创建另一个数据帧。有没有比对每一列进行手动乘法更聪明的方法,如:

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
的列