Ниже мой фрейм данных:
val myDF= spark.sql("select company, comp_id from my_db.my_table")
myDF: org.apache.spark.sql.DataFrame = [company: string, comp_id: string]
А данные выглядят как
+----------+---------+
| company |comp_id |
+----------+---------+
|macys | 101 |
|jcpenny | 102 |
|kohls | 103 |
|star bucks| 104 |
|macy's | 105 |
+----------+---------+
Я пытаюсь создать объект коллекции Map
(как показано ниже) в Scala из приведенного выше фрейма данных.
Map("macys" -> "101", "jcpenny" -> "102" ..., "macy's" -> "105")
Вопросы:
1) Будет ли последовательность записей в кадре данных совпадать с последовательностью содержимого в исходном файле, расположенном под таблицей?
2) Если я сделаю collect()
на кадре данных, будет ли последовательность создаваемого массива соответствовать последовательности содержимого в исходном файле?
Объяснение: Когда я делаю df.collect().map(t => t(0) -> t(1)).toMap
, похоже, что объект коллекции карт не сохраняет порядок вставки, что также является поведением по умолчанию для карты скалы.
res01: scala.collection.immutable.Map[Any,Any] = Map(kohls -> 103, jcpenny -> 102 ...)
3) Итак, как преобразовать фрейм данных в один из объектов карты коллекции scala, который фактически сохраняет порядок вставки / последовательность записей.
Объяснение: Поскольку LinkedHashMap
является одним из типов объектов коллекции карт Scala, чтобы обеспечить порядок вставки. Я пытаюсь найти способ преобразовать фрейм данных в LinkedHashMap
объект.