У меня есть следующий фрейм данных Spark, который создается динамически
| имя| номер |
+--------+---------+
| Энди | (20,10,30)|
|Берта | (30,40,20)|
| Джо | (40,90,60)|
+-------+---------+
Теперь мне нужно перебрать каждую строку и столбец в Spark, чтобы напечатать следующий вывод: Как это сделать?
Энди 20
Энди 10
Энди 30
Берта 30
Берта 40
Берта 20
Джо 40
Джо 90
Джо 60
Вам нужна функция взорваться. Вот примеры его использования.
Предполагая, что числовой столбец имеет строковый тип данных, вы можете добиться желаемых результатов, выполнив следующие шаги.
Исходный фрейм данных:
val df = Seq(("Andy", "20,10,30"), ("Berta", "30,40,20"), ("Joe", "40,90,60"))
.toDF("name", "number")
Затем создайте промежуточный фрейм данных с 3 числовыми столбцами, разделив числовой столбец запятой.
val Interim_Df = df.withColumn("n1", split(col("number"), ",").getItem(0))
.withColumn("n2", split(col("number"), ",").getItem(1))
.withColumn("n3", split(col("number"), ",").getItem(2))
.drop("number")
Затем создайте окончательный фрейм данных результата, выполнив объединение с oneIndexDfs.
val columnIndexes = Seq(1, 2, 3)
val onlyOneIndexDfs = columnIndexes.map(x =>
Interim_Df.select(
$"name",
col(s"n$x").alias("number")))
val resultDF = onlyOneIndexDfs.reduce(_ union _)
Привет, пожалуйста, раскройте структуру DF. взорвать должно сработать.