apache-spark - 如何在火花中使用 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;
任何人都可以建议吗?
解决方案
您还可以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;
推荐阅读
- delphi - 为什么 MagSetImageScalingCallback 函数在新桌面执行时会失败?
- python - 我可以打印日期和时间,但 ser.write 到 USB 串行 LCD 16*2 不起作用
- wordpress - 将 Wordpress 页面上传到 Cybderduck
- c++ - 我的 C++ 代码中的堆栈错误,它是什么以及如何修复它?
- r - 使用 ggsave 时 dyn.load(file, DLLpath = DLLpath, ...) 出错
- shell - 在 bash 脚本中执行包含引号的命令
- swift - 在 Core Data 中保存小数和货币
- c++ - C ++错误非静态成员引用必须相对于特定对象
- c# - 索引超出范围 - 编辑网格视图
- android - 如何在 Android 中将一个表格布局添加到另一个表格布局中