我试图了解* []如何允许我将参数传递给它 聚集在pyspark。这运行,但我试图在另一个例子中重用代码,并希望有人可以指向我相应的文档,以便我知道这里发生了什么。我喜欢它可以将列表中的列作为参数传递。
我希望有人知道* []在这里做了什么。 如何知道将列附加到DataFrame而不是遍历列表,并为testdata中的每个元素执行一次。
import pyspark.sql.functions as fn
spark = SparkSession.builder.getOrCreate()
testdata= spark.createDataFrame([
(1, 144.5, 5.9, 33, 'M'),
(2, 167.2, None, 45, 'M'),
(3, 124.1, 5.2, 23, 'F'),
(4, None, 5.9, None, 'M'),
(5, 133.2, 5.7, 54, 'F'),
(3, 124.1, None, None, 'F'),
(5, 129.2, 5.3, None, 'M'),
],
['id', 'weight', 'height', 'age', 'gender']
)
testdata.where(
fn.col("gender") == 'M'
).select(
'*'
).agg(*[
(1 - (fn.count(c) / fn.count('*'))).alias(c + '_missing')
for c in testdata.columns
]).toPandas()
输出:
+----------+--------------+--------------+-----------+--------------+ |id_missing|weight_missing|height_missing|age_missing|gender_missing| +----------+--------------+--------------+-----------+--------------+ | 0.0| 0.25| 0.25| 0.5| 0.0| +----------+--------------+--------------+-----------+--------------+
答案 0 :(得分:0)
在*
前面使用list
会将成员扩展为单独的参数。因此,以下两个函数调用将是等效的:
my_function(*[1, 2, 3])
my_function(1, 2, 3)
显然,如果您已经知道参数的确切数量,那么第一个并不是非常有用。通过像你正在使用的理解一样,它变得更有用,哪里不清楚list
中有多少项。