如何遍历“ spark”数据框的列?

时间:2019-05-29 16:36:24

标签: apache-spark dataframe

我有以下动态创建的Spark数据框

|名称|号|

+ -------- + --------- +

|安迪| (20,10,30)|

|贝塔| (30,40,20)|

|乔| (40,90,60)|

+ ------- + --------- +

现在,我需要迭代Spark中的每一行和每一列,以打印以下输出,该怎么做?

安迪20

安迪10

安迪30

贝尔塔30

贝尔塔40

贝尔塔20

乔40

乔90

乔60

2 个答案:

答案 0 :(得分:0)

您需要爆炸功能。 Here samples of its usage.

答案 1 :(得分:0)

假设数字列的数据类型为字符串,则可以按照以下步骤获得所需的结果。

原始数据框:

         val df = Seq(("Andy", "20,10,30"), ("Berta", "30,40,20"), ("Joe", "40,90,60"))
         .toDF("name", "number")

然后通过用逗号分隔数字列来创建具有3个数字列的中间数据框。

  val Interim_Df = df.withColumn("n1", split(col("number"), ",").getItem(0))
  .withColumn("n2", split(col("number"), ",").getItem(1))
  .withColumn("n3", split(col("number"), ",").getItem(2))
  .drop("number")

然后通过与oneIndexDfs合并来生成最终结果数据帧。

val columnIndexes = Seq(1, 2, 3)

val onlyOneIndexDfs = columnIndexes.map(x =>
  Interim_Df.select(
    $"name",
    col(s"n$x").alias("number")))

val resultDF = onlyOneIndexDfs.reduce(_ union _)