如何将Spark DataFrame列转换为列表?

时间:2017-05-18 07:50:40

标签: apache-spark group-by aggregate spark-dataframe sparkr

我想以特定的方式将Spark DataFrame转换为另一个DataFrame,如下所示:

我有Spark DataFrame:

col  des
A    a
A    b
B    b
B    c

作为操作的结果,我希望还有一个Spark DataFrame:

col  des
A    a,b
B    b,c

我试图使用:

  

结果< - 汇总(groupBy(df,df $ col),des = n(df $ des))

结果我获得了计数。是否有任何参数(汇总或聚合)将列转换为列表或类似的东西,但假设所有操作都在Spark上完成?

提前谢谢

2 个答案:

答案 0 :(得分:2)

这是scala中的解决方案,你需要弄清楚SparkR。

  val dataframe = spark.sparkContext.parallelize(Seq(
    ("A", "a"),
      ("A", "b"),
      ("B", "b"),
      ("B", "c")
  )).toDF("col", "desc")

  dataframe.groupBy("col").agg(collect_list(struct("desc")).as("desc")).show

希望这有帮助!

答案 1 :(得分:1)

sparkR代码:

    sc <- sparkR.init()
    sqlContext <- sparkRSQL.init(sc)

    #create R data frame

    df <- data.frame(col= c("A","A","B","B"),des= c("a","b","b","c"))

    #converting to spark dataframe

    sdf <- createDataFrame( sqlContext, df)

    registerTempTable(sdf, "sdf")

    head(sql(sqlContext, "SQL QUERY"))

在其中编写相应的sql查询并执行它。