我在spark中有两列A(year1)和B(year2)。我需要创建一个列C,其中必须包含第1年和第2年之间的年份数组。
假设A-1990年和B-1993年
o / p C-应该为[1990,1990,1991,1991,1992,1992,1993,1993]
谁能在不使用udf的情况下提出解决方案(火花)
答案 0 :(得分:0)
您可以尝试,假设df包含year1
和year2
。
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
spark = SparkSession.builder.getOrCreate()
years = spark.range(2020).withColumnRenamed('id', 'year')
df = (
df
.withColumn(
‘id’,
F. monotonically_increasing_id()
) # EDIT: There was a missing bracket here
.join(
years,
F.col(‘year’).between(‘year1’, ‘year2’),
)
.groupBy(
‘id’
)
.agg(
F.collect_list(‘year’).alias(‘years’)
)
)
让我知道这是行不通的。