Scala / Spark数据帧数组

时间:2016-03-03 21:53:49

标签: scala apache-spark dataframe

[我们正在测试一种在优化时可提供出色并行性的驱动程序。 Trick是,它没有在Spark分区内并行化(在访问DB2中),因此要求我们告诉它我们想要多少并行线程,并且我们为每个线程抛出一个查询。虽然我希望在一个包含DataFrame对象数组的循环中执行此操作,但我无法弄清楚如何使用DataFrame对象数组编写scala。对于蛮力测试,我做了:

    val DF1 = sqlContext.read.format("jdbc"). ...yada yada
    val DF2 = sqlContext.read.format("jdbc"). ...yada yada
    val DF3 = sqlContext.read.format("jdbc"). ...yada yada
    val DF4 = sqlContext.read.format("jdbc"). ...yada yada

    val unionDF=(((DF1.unionAll(DF2)).unionAll(DF3)).unionAll(DF4))

这非常适合并行化为4个分区。我宁愿在一个循环中这样做,但是看起来我似乎需要这样的东西:

var myDF = new Array [DataFrame](parallelBreakdown)...而DataFrame不是一个类型。关于这样做的任何想法都没有蛮力方法吗?谢谢,

1 个答案:

答案 0 :(得分:0)

DataFrame确实是一种类型

import org.apache.spark.sql.DataFrame

我能够定义一个函数

def querier(dim_vals: Array[String]): = {
    dim_vals.flatMap( dim_val => 
        sql(MY_QUERY))
    }

返回Array[DataFrame],我可以使用Robert Congiu的答案创建单个数据框,并在其上调用.show()