Как создать DataFrame с некоторым содержанием и N строками? - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно сгенерировать фрейм данных с этими значениями столбцов

   A , B , C
   1,  b1, c1
   2,  b2 , c2
   3,  b3,  c3

Мне нужно сгенерировать 1000 строк в фрейме данных, и каждый раз, когда генерируется новая строка, значение в столбце A должно увеличиваться

Я использовал этот код

val df = spark.sparkContext.parallelize(Seq.fill(200){(colA+1,colB+1)}).toDF("col1","col2")

как увеличивать значения столбца каждый раз, когда добавляется новая строка, я либо scala или java?.

1 Ответ

2 голосов
/ 07 февраля 2020

вы можете сделать это так:

import spark.implicits._

val df = (1 to 100).map(n => (n, s"b$n",s"c$n"))
  .toDF("A","B","C")

, что даст:

+---+---+---+
|  A|  B|  C|
+---+---+---+
|  1| b1| c1|
|  2| b2| c2|
|  3| b3| c3|
|  4| b4| c4|
|  5| b5| c5|
|  6| b6| c6|
|  7| b7| c7|
|  8| b8| c8|
|  9| b9| c9|
| 10|b10|c10|
+---+---+---+

Вместо 1 to 100 вы также можете использовать Seq.range(1,100), Seq.tabulate(100)(_ + 1) или Seq.iterate(1,100)(_ + 1)

альтернативно, без построения из коллекции scala, а именно с использованием spark.range, который дает Dataset[Long]:

val df = spark.range(100)
  .map(n => (n,s"b$n",s"c$n"))
  .toDF("A","B","C")

или с использованием withColumn и concat

val df = spark.range(1L,100L).toDF("A")
  .withColumn("B",concat(lit("b"),$"A"))
  .withColumn("C",concat(lit("c"),$"A"))

, который дает тот же результат

, но

как увеличивать значения столбца каждый раз, когда добавляется новая строка, в scala или java?.

Это довольно сложно, я бы не рекомендовал добавлять строки (в al oop) к кадру данных, для этого потребуется много union, а для увеличения последнего значения потребуется агрегирование каждый раз

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