spark dataframe:如何爆炸IntegerType列

时间:2017-04-13 06:54:28

标签: scala apache-spark dataframe explode

val schema = StructType(Array(StructField("id", IntegerType, false),StructField("num", IntegerType, false)))

我希望每个id生成从0到num的连续数字。 我不知道怎么办.. 感谢

data and result here !!!

2 个答案:

答案 0 :(得分:2)

您可以使用UDFexplode功能:

import org.apache.spark.sql.functions.{udf, explode}

val range = udf((i: Int) => (0 to i).toArray)
df.withColumn("num", explode(range($"num")))

答案 1 :(得分:0)

尝试DataFrame.explode

df.explode(col("id"), col("num")) {case row: Row =>
    val id = row(0).asInstanceOf[Int]
    val num = row(1).asInstanceOf[Int]
    (0 to num).map((id, _))
}

或者在RDD领域,您可以使用flatmap

df.rdd.flatMap(x => (0 to x._2).map((x._1, _)))