Я хочу преобразовать свой фрейм данных в Seq в Zeppelin.
Мой Dataframe, как показано ниже
+--+-------+-----+
|id| charid| name|
+--+-------+-----+
| 1| a1| ad|
| 2| a2| agf|
| 3| a3| ged|
| 4| a4| nom|
| 5| a5| scal|
| 6| a6| tip|
| 7| a7| low|
+--+-------+-----+
Итак, как я могу преобразовать это в Seq, как показано ниже.
Seq[Длинный, (Строка, Строка)]
Вы можете использовать collect
и toSeq
для преобразования в Seq. Убедитесь, что ваш набор данных достаточно мал, чтобы поместиться в узле драйвера.
df.rdd
.map(r => (r.getLong(0), (r.getString(1), r.getString(2))))
.collect()
.toSeq
Или
df.collect
.map(r => (r.getLong(0), (r.getString(1), r.getString(2))))
.toSeq
@mck Можете ли вы предоставить схему вашего фрейма данных?
спасибо, я увидел, что не так, моя схема имеет тип int. Я отредактировал свой ответ, чтобы преобразовать столбцы в длинный тип, чтобы предотвратить проблемы, потому что я не уверен, как выглядит схема OP.
Попробуйте использовать map
и toSeq
?
val result = df.select($"id".cast("long"), $"charid", $"name")
.rdd
.map(row => (row(0).asInstanceOf[Long], (row(1).asInstanceOf[String], row(2).asInstanceOf[String])))
.collect
.toSeq
Я думал об этом в начале, но на моей машине выдает ошибку
java.lang.String incompatible with java.lang.Long
...