Как сложить несколько 1 x 1 фреймов данных, чтобы получить 1 xn фрейм данных? - PullRequest
0 голосов
/ 04 мая 2019

У меня огромный массив данных, содержащий миллионы строк.Из этих строк я получаю новые k кадры данных, которые имеют только 1 строку и 1 столбец.Каков хороший способ объединить эти k данных вместе, чтобы теперь получить a 1 x k данных с 1 строкой и k столбцами.

  1. Раньше я начинал с использования crossJoin средивсе k фреймы данных, такие как df1.crossJoin(df2).crossJoin(df3).crossJoin(dfk)

    Это привело к ошибке тайм-аута широковещания,

  2. Позже я перешел к тому, что я считаю более разумными решениями.

    df1.withColumn("temp_id", lit(0)).join(df2.withColumn("temp_id", lit(0)), "temp_id").drop("temp_id").

    Это привело к странной, но схожей ошибке тайм-аута широковещания.

Мне действительно нужен новый DataFrameс 1 строкой и k столбцами, которые на языке numpy / pandas могут быть

pandas.concat(..., axis=1) ИЛИ np.vstack(.....)

1 Ответ

0 голосов
/ 04 мая 2019

Я думаю, что вы хотите выполнить операцию "zip".Spark не предоставляет этот метод для Dataframes, но вы можете увидеть, как он работает, в следующем примере (версия Spark следует этому примеру):

scala> val l1 = List("a", "b")
l1: List[String] = List(a, b)

scala> val l2 = List(1,2)
l2: List[Int] = List(1, 2)

scala> val zipped = l1.zip(l2)
zipped: List[(String, Int)] = List((a,1), (b,2))

scala> zipped.foreach(println)
(a,1)
(b,2)

scala> 

Как это сделать в Spark, здесь уже дан ответ: Как заархивировать два (или более) DataFrame в Spark

По сути, вы делаете это:

val zippedRDD = df1.rdd.zip(df2.rdd)

это оставит вам RDD, который вы можете конвертироватьв DF или DS по мере необходимости обычным способом.

...