【发布时间】:2019-09-20 23:13:02
【问题描述】:
我有以下示例数据框
df = spark.createDataFrame([('start','end'), ('start1','end1')] ,["start", "end"])
我想分解每行中的值并在生成的行中关联交替的 1-0 值。这样我可以识别每一行中的开始/结束条目。
我可以通过这种方式达到预期的效果
from pyspark.sql.window import Window
w = Window().orderBy(lit('A'))
df = (df.withColumn('start_end', fn.array('start', 'end'))
.withColumn('date', fn.explode('start_end'))
.withColumn('row_num', fn.row_number().over(w)))
df = (df.withColumn('is_start', fn.when(fn.col('row_num')%2 == 0, 0).otherwise(1))
.select('date', 'is_start'))
给了
| date | is_start |
|--------|----------|
| start | 1 |
| end | 0 |
| start1 | 1 |
| end1 | 0 |
但是对于这样一个简单的任务来说似乎过于复杂了。
不使用 UDF 有没有更好/更清洁的方法?
【问题讨论】:
标签: apache-spark pyspark pyspark-sql