在pyspark中的其他两列中创建一个值范围介于两列之间的列

时间:2019-07-01 10:37:56

标签: pyspark

我在spark中有两列A(year1)和B(year2)。我需要创建一个列C,其中必须包含第1年和第2年之间的年份数组。
假设A-1990年和B-1993年 o / p C-应该为[1990,1990,1991,1991,1992,1992,1993,1993]

谁能在不使用udf的情况下提出解决方案(火花)

1 个答案:

答案 0 :(得分:0)

您可以尝试,假设df包含year1year2

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’)
    )
)

让我知道这是行不通的。