Разбор Spark CSV для различных файлов и параметров с помощью Univocity CSV Parser Scala - PullRequest
2 голосов
/ 03 июня 2019

Я пытаюсь проанализировать этот CSV-файл со следующими настройками.

ArrayType
"[""a"",""ab"",""avc""]"
"[1,23,33]"
"[""1"",""22""]"
"[""1"",""22"",""12222222.32342342314"",123412423523.3414]"
"[a,c,s,a,d,a,q,s]"
"["""","""","""",""""]"
"["","","",""]"
"[""abcgdjasc"",""jachdac"",""''""]"
"[""a"",""ab"",""avc""]"

val df = spark.read.format("csv").option("header","true").option("escape","\"").option("quote","\"").load("/home/ArrayType.csv")

Выход:

scala> df.show ()

+--------------------+
|           ArrayType|
+--------------------+
|    ["a","ab","avc"]|
|           [1,23,33]|
|          ["1","22"]|
|["1","22","122222...|
|   [a,c,s,a,d,a,q,s]|
|       ["","","",""]|
|           [",",","]|
|["abcgdjasc","jac...|
|    ["a","ab","avc"]|
+--------------------+

Однако, поскольку здесь escape-символ "\" ", я могу прочитать его как один столбец, тогда как, если входной файл выглядит следующим образом,

ArrayType
"["a","ab","avc"]"
"[1,23,33]"
"["1","22"]"
"["1","22","12222222.32342342314",123412423523.3414]"
"[a,c,s,a,d,a,q,s]"
"["","","",""]"
"[",",","]"
"["abcgdjasc","jachdac","''"]"
"["a","ab","avc"]"

Он показывает мне следующий вывод, в то время как он мне нужен для анализа так же, как и раньше.

scala> df.show ()

+-----------------+-------+--------------------+-------------------+
|              _c0|    _c1|                 _c2|                _c3|
+-----------------+-------+--------------------+-------------------+
|            "["a"|     ab|             "avc"]"|                   |
|        [1,23,33]|       |                    |                   |
|            "["1"| "22"]"|                    |                   |
|            "["1"|     22|12222222.32342342314|123412423523.3414]"|
|[a,c,s,a,d,a,q,s]|       |                    |                   |
|        [",",","]|       |                    |                   |
|                [|      ,|                   ]|                   |
|    "["abcgdjasc"|jachdac|              "''"]"|                   |
|            "["a"|     ab|             "avc"]"|                   |
|            "["a"|     ab|             "avc"]"|                   |
+------+-------------+-----------------+-------+--------------------

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

Как получить второй CSV-файл в виде одного столбца в кадре данных?

Как поддерживать оба вида файлов для анализа в виде одного столбца?

Я использую синтаксический анализатор univocity CSV для анализа.

...