Как прочитать этот пользовательский файл в spark- scala с использованием фреймов данных - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть файл в формате:

ID|Value
1|name:abc;org:tec;salary:5000
2|org:Ja;Designation:Lead

Как мне прочитать это с помощью Dataframes? Требуемый вывод:

1,name,abc
1,org,tec
2,org,Ja
2,designation,Lead

Пожалуйста, помогите

1 Ответ

0 голосов
/ 06 февраля 2020

Вам понадобится немного разбора строки ad-ho c, потому что я не думаю, что есть встроенный парсер, который делает именно то, что вы хотите. Я надеюсь, что вы уверены в своем формате и в том, что специальные символы (|, : и ;) не появляются в ваших полях, потому что это все испортило бы.

учитывая, что вы получите свой результат с помощью пары простых split s и explode, чтобы поместить каждое свойство в словарь в разные строки.

val raw_df = sc.parallelize(List("1|name:abc;org:tec;salary:5000", "2|org:Ja;Designation:Lead"))
   .map(_.split("\\|") )
   .map(a => (a(0),a(1))).toDF("ID", "value")

raw_df 
   .select($"ID", explode(split($"value", ";")).as("key_value"))
   .select($"ID", split($"key_value", ":").as("key_value"))
   .select($"ID", $"key_value"(0).as("property"), $"key_value"(1).as("value"))
   .show

result:

+---+-----------+-----+
| ID|   property|value|
+---+-----------+-----+
|  1|       name|  abc|
|  1|        org|  tec|
|  1|     salary| 5000|
|  2|        org|   Ja|
|  2|Designation| Lead|
+---+-----------+-----+

Редактировать: альтернативно, вы можете использовать функцию from_json (https://spark.apache.org/docs/latest/api/scala/index.html#org. apache .spark. sql .functions $) в поле значения для его анализа. Однако вам все равно нужно разбить результат на отдельные строки и распределить каждый элемент результирующего объекта в нужном столбце. С простым примером, который вы привели, это не будет проще и, следовательно, сводится к вопросу вкуса.

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