Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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.Agg()_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 将可变列数传递给Pyspark.Agg()

Python 将可变列数传递给Pyspark.Agg(),python,apache-spark,pyspark,Python,Apache Spark,Pyspark,在PySpark中,我需要在运行时构建列列表,然后在这些列上进行聚合 这是一个有效的示例: T.agg(col1,col2) 但是我需要传递一个列列表类型列列表(不是字符串) 不起作用: cols=[col1,col2] T.agg(cols)#将参数作为tuple1(List)传递 不起作用: cols=[col1,col2] T.agg(tupple(cols))#将参数作为tupple1(tupple2)传递 这两种情况在PySpark代码上都失败: assert all(表示表达式

在PySpark中,我需要在运行时构建列列表,然后在这些列上进行聚合

这是一个有效的示例:

T.agg(col1,col2)
但是我需要传递一个列列表类型列列表(不是字符串)

不起作用:

cols=[col1,col2]
T.agg(cols)#将参数作为tuple1(List)传递
不起作用:

cols=[col1,col2]
T.agg(tupple(cols))#将参数作为tupple1(tupple2)传递
这两种情况在PySpark代码上都失败:
assert all(表示表达式中的c的isinstance(c,Column),“所有表达式都应该是Column”


问题是Python将列表作为tuple1传递,我需要传递一个列列表。解决方案是什么?

问题是您需要将列表解压为单个参数。您可以使用
*
运算符来执行此操作

T.agg(*cols)
*
解压列表中的元素。这里是另一个玩具的例子,它独立于PySpark

def测试(a、b、c、d): 打印(a、b、c、d) 数据=[3,4,5,6] 测试(*数据) #输出: # 3 4 5 6
问题在于,您需要将列表解压为单个参数。您可以使用
*
运算符来执行此操作

T.agg(*cols)
*
解压列表中的元素。这里是另一个玩具的例子,它独立于PySpark

def测试(a、b、c、d): 打印(a、b、c、d) 数据=[3,4,5,6] 测试(*数据) #输出: # 3 4 5 6
根据评论,如果要进行“第一次”聚合,可以执行以下操作:

col_list = ['col1', 'col2']
exprs = [first(i).alias("first_"+i) for i in col_list]

df.groupBy("some_col").agg(*exprs).show()

根据评论,如果要进行“第一次”聚合,可以执行以下操作:

col_list = ['col1', 'col2']
exprs = [first(i).alias("first_"+i) for i in col_list]

df.groupBy("some_col").agg(*exprs).show()

你想做什么类型的聚合?特别是第一个找到的元素我的代码是这样的:T=T.agg(第一个(输出[0])。别名(输出[0]),第一个(输出[1])。别名(输出[1]))。别名(“T”)我需要一个列表作为参数你想做什么类型的聚合?特别是第一个找到的元素我的代码是这样的:T=T.agg(第一个)(输出[0])。别名(输出[0]),首先(输出[1])。别名(输出[1])。别名(“T”)我需要一个列表作为参数