Python 3.x 在pyspark sql select语句中动态创建列
我有一个名为unique_attributes的pyspark数据帧。dataframe包含列productname、productbrand、producttype、weight、id。我正在按一些列进行分区,并尝试使用窗口函数获取id列的第一个值。我希望能够动态地将列列表传递给分区。因此,例如,如果我想将weight列添加到分区中,而不必在select中编写另一个'col('weight'),只需传递一个列表即可。有人对如何做到这一点有什么建议吗?下面我举一个例子 当前代码:Python 3.x 在pyspark sql select语句中动态创建列,python-3.x,pyspark,apache-spark-sql,Python 3.x,Pyspark,Apache Spark Sql,我有一个名为unique_attributes的pyspark数据帧。dataframe包含列productname、productbrand、producttype、weight、id。我正在按一些列进行分区,并尝试使用窗口函数获取id列的第一个值。我希望能够动态地将列列表传递给分区。因此,例如,如果我想将weight列添加到分区中,而不必在select中编写另一个'col('weight'),只需传递一个列表即可。有人对如何做到这一点有什么建议吗?下面我举一个例子 当前代码: w2 = Wi
w2 = Window().partitionBy(['productname',
'productbrand',
'producttype']).orderBy(unique_attributes.id.asc())
first_item_id_df=unique_attributes\
.select(col('productname'),
col('productbrand'),
col('producttype')),first("id",True).over(w2).alias('matchid')).distinct()
所需的动态代码:
column_list=['productname',
'productbrand',
'producttype',
'weight']
w2 = Window().partitionBy(column_list).orderBy(unique_attributes.id.asc())
# somehow creates
first_item_id_df=unique_attributes\
.select(col('productname'),
col('productbrand'),
col('producttype'), col('weight'),first("id",True).over(w2).alias('matchid')).distinct()
只需使用
*column\u list
@mck感谢您这么快回复我,您的意思是:第一项\u id\u df=unique\u attributes\。选择(*column\u list,first(“id”,True)。over(w2)。别名('matchid'))。distinct()