Создать RDD из записи RDD внутри цикла foreach - PullRequest
0 голосов
/ 07 мая 2018

У меня есть некоторая пользовательская логика, которая просматривает элементы в RDD и хотела бы условно записать в TempView с помощью подхода UNION, используя foreach, как показано ниже:

rddX.foreach{ x => {      
    // Do something, some custom logic
    ...
    val y = create new RDD from this RDD element x  
    ...
    or something else   

    // UNION to TempView
    ...
}}

Что-то действительно простое, чего я не понимаю:

  1. Как преобразовать n-ую запись (x) СДР в сам СДР длиной 1?
  2. Или преобразовать n-ую запись (x) непосредственно в DF?

Я получаю все случаи, основанные на множестве, но здесь я хочу добавить, чтобы сразу выполнить условие для простоты. То есть на уровне записи позиции в СДР.

Теперь, прежде чем получить -1 как SO 41356419, я только предлагаю это, поскольку у меня есть конкретный вариант использования, и для изменения TempView в SPARK SQL мне нужен такой подход - по крайней мере, так я думаю. Не типичный случай использования искры, но это то, с чем мы сталкиваемся.

Заранее спасибо

1 Ответ

0 голосов
/ 08 мая 2018

Прежде всего - вы не можете создать RDD или DF внутри foreach() другой функции RDD или DF / DS.Но вы можете получить n-й элемент из RDD и создать новый 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)
  }
}

Надеюсь, что поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...