首页 > 解决方案 > 如何在火花中使用 foreach 访问数组?

问题描述

我有如下数据:

tab1,c1|c2|c3
tab2,d1|d2|d3|d4|d5
tab3,e1|e2|e3|e4

我需要在火花中将其转换为如下:

select c1,c2,c3 from tab1;
select d1,d2,d3,d4,d5 from tab2;
select e1,e2,e3,e4 from tab3;

我能够得到这样的:

d.foreach(f=>{println("select"+" "+f+" from"+";")})
select tab3,e1,e2,e3,e4 from;
select tab1,c1,c2,c3 from;
select tab2,d1,d2,d3,d4,d5 from;

任何人都可以建议吗?

标签: apache-sparkapache-spark-sql

解决方案


您还可以map对 RDD 使用操作。

假设你有一个String类似的 RDD:

val rdd = spark.parallelize(Seq(("tab1,c1|c2|c3"), ("tab2,d1|d2|d3|d4|d5"), ("tab3,e1|e2|e3|e4")))

通过此操作:

val select = rdd.map(str=> {
      val separated = str.split(",", -1)
      val table = separated(0)
      val cols = separated(1).split("\\|", -1).mkString(",")

      "select " + cols + " from " + table + ";"
    })

你会得到预期的结果:

select.foreach(println(_))
select d1,d2,d3,d4,d5 from tab2;
select e1,e2,e3,e4 from tab3;
select c1,c2,c3 from tab1;

推荐阅读