从foreach循环内的RDD条目创建RDD

时间:2018-05-07 19:15:14

标签: apache-spark

我有一些自定义逻辑,用于查看RDD中的元素,并希望使用UNION( SELECTCOLUMNS(Targets, "Segement", Targets[Segment], "Qtr", "Q1", "Target", Targets[Q1]), SELECTCOLUMNS(Targets, "Segement", Targets[Segment], "Qtr", "Q2", "Target", Targets[Q2]), SELECTCOLUMNS(Targets, "Segement", Targets[Segment], "Qtr", "Q3", "Target", Targets[Q3]), SELECTCOLUMNS(Targets, "Segement", Targets[Segment], "Qtr", "Q4", "Target", Targets[Q4])) 通过UNION方法有条件地写入TempView,如下所示:

foreach

我没有得到的基本内容:

  1. 如何将RDD的第n个条目(x)转换为长度为1的RDD本身?
  2. 或者,将第n个条目(x)直接转换为DF?
  3. 我得到了所有基于集合的案例,但是为了简单起见,我想在立即满足条件时追加。即在RDD中的项目条目级别。

    现在,在获得-1作为SO 41356419之前,我只是建议这个因为我有一个特定的用例并且在SPARK SQL中改变TempView,我确实需要这样的方法 - 至少这是我的想法。不是典型的SPARK使用案例,但这就是我们/我所面临的情况。

    提前致谢

1 个答案:

答案 0 :(得分:0)

首先 - 您无法在另一个RDD或DF / DS功能的foreach()内创建RDD或DF。但是你可以从RDD获得第n个元素并使用该单个元素创建新的RDD。

编辑: 然而,解决方案要简单得多:

import org.apache.spark.{SparkConf, SparkContext}

object Main {

  val conf = new SparkConf().setAppName("myapp").setMaster("local[*]")
  val sc = new SparkContext(conf)

  def main(args: Array[String]): Unit = {

    val n = 534 // This is input value (index of the element we'ŗe interested in)

    sc.setLogLevel("ERROR")

    // Creating dummy rdd
    val rdd = sc.parallelize(0 to 999).cache()
    val singletonRdd = rdd.zipWithIndex().filter(pair => pair._1 == n)
  }
}

希望有所帮助!