#scala #csv #apache-spark #apache-spark-sql
#scala #csv #apache-spark #apache-spark-sql
Вопрос:
Я пытаюсь прочитать CSV-файл в Spark, используя CSV Reader API. В настоящее время я сталкиваюсь с исключением array index out of bound.
Проверка:
There is no issue with the input file. All the rows have same number of columns. Column count - 65
Помещаю ниже код, который я пробовал.
sparkSess.read.option("header", "true").option("delimiter", "|").csv(filePath)
Ожидаемый результат — DataFrame.show()
Фактическая ошибка —
19/03/28 10:42:51 INFO FileScanRDD: Reading File path: file:///C:/Users/testing/workspace_xxxx/abc_Reports/src/test/java/report1.csv, range: 0-10542, partition values: [empty row]
19/03/28 10:42:51 ERROR Executor: Exception in task 0.0 in stage 6.0 (TID 6)
java.lang.ArrayIndexOutOfBoundsException: 63
at org.apache.spark.unsafe.types.UTF8String.numBytesForFirstByte(UTF8String.java:191)
at org.apache.spark.unsafe.types.UTF8String.numChars(UTF8String.java:206)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$10$$anon$1.hasNext(WholeStageCodegenExec.scala:614)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:253)
at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:247)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:830)
at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:830)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:109)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Входные данные ::
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|AA|BB|CC|DD|EE|FF|GG|HH|II|JJ|KK|LL|MM|NN|OO|PP|QQ|RR|SS|TT|UU|VV|WW|XX|YY|ZZ|TGHJ|HG|EEE|ASD|EFFDCLDT|QSAS|WWW|DATIME|JOBNM|VFDCXS|REWE|XCVVCX|ASDFF
QW|8|2344|H02|1002| |1|2019-01-20|9999-12-31| |EE|2014-01-20|2014-01-20|2014-01-20|CNB22345 |IN|9|1234444| | | |10|QQ|8|BMX10290M|EWR| |.000000000|00|M |2027-01-20|2027-01-20| |.00|.00|.00|.00|2014-01-20|1901-01-01|3423.25| | | | |RE|WW| |RQ| | | | | | | | |1901-01-01|0|SED2233345 |2019-01-15 22:10:23|213EDSFDS |78978775|2019-03-23 07:38:34.823000000| |
Комментарии:
1. не могли бы вы, пожалуйста, поделиться образцом содержимого csv-файла, который вы используете.
2. @KZapagol — добавлен образец данных в соответствии с запросом!
3. @Dasarathy.. Я могу прочитать CSV-файл с вашими образцами данных. Смотрите мой обновленный комментарий.
4. @KZapagol Не могли бы вы, пожалуйста, присвоить заголовку значение true и попробовать?
5. @ Dasarathy .. Я пробовал с header, и он работает нормально. Пожалуйста, посмотрите мой обновленный комментарий.
Ответ №1:
Только что нашел точную проблему.
На самом деле, 10 CSV-файлов, которые я пытался прочитать, были файлами формата UTF-8. Которые НЕ были причиной проблемы. 3 файла из общего числа 13 файлов были отформатированы в формате UCS-2. Следовательно, это вызывало проблему с процессом чтения CSV. Именно эти файлы были причиной вышеупомянутой ошибки.
UTF-8 ==> Unicode Transformation Format Encoding.
UCS-2 ==> Universal Coded Character Set Encoding.
Из этого выяснилось, что databricks CSV read поддерживает кодировку UTF и вызывает проблемы с кодировкой UCS. Следовательно, сохранил файлы в формате UTF-8 и попытался прочитать файл. Это сработало как по волшебству.
Не стесняйтесь добавлять дополнительные сведения об этом, если таковые имеются.
Комментарии:
1. Вы можете использовать
charset
опцию для чтения файла с другим кодировщиком. Например, если вы хотите прочитать файл Shift JS encoder, вы можете установить параметр кодировки как.option("charset", "Shift-JIS")
.
Ответ №2:
Вы можете использовать com.databricks.spark.csv
для чтения CSV-файлов.Пожалуйста, найдите пример кода, как показано ниже.
import org.apache.spark.sql.SparkSession
object SparkCSVTest extends App {
val spark = SparkSession
.builder()
.master("local")
.appName("File_Streaming")
.getOrCreate()
val df = spark.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("delimiter", "|")
.option("inferSchema", "false")
.load("C:/Users/KZAPAGOL/Desktop/CSV/csvSample.csv")
df.show()
}
Используемый CSV-файл:
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|AA|BB|CC|DD|EE|FF|GG|HH|II|JJ|KK|LL|MM|NN|OO|PP|QQ|RR|SS|TT|UU|VV|WW|XX|YY|ZZ|TGHJ|HG|EEE|ASD|EFFDCLDT|QSAS|WWW|DATIME|JOBNM|VFDCXS|REWE|XCVVCX|ASDFF
QW|8|2344|H02|1002| |1|2019-01-20|9999-12-31| |EE|2014-01-20|2014-01-20|2014-01-20|CNB22345 |IN|9|1234444| | | |10|QQ|8|BMX10290M|EWR| |.000000000|00|M |2027-01-20|2027-01-20| |.00|.00|.00|.00|2014-01-20|1901-01-01|3423.25| | | | |RE|WW| |RQ| | | | | | | | |1901-01-01|0|SED2233345 |2019-01-15 22:10:23|213EDSFDS |78978775|2019-03-23 07:38:34.823000000| |
С заголовком :
--- --- ---- --- ---- -------------- --- ---------- ---------- --- --- ---------- ---------- ---------- -------------------- --- --- ------- --- -------- -------- --- --- --- --------- --- --- ---------- --- --- ---------- ---------- --- --- --- --- --- ---------- ---------- ------- --- ---------- ---------- ------ --- --- --- --- --- --- --- -------- ----- -------- --- --- ---------- ---- ------------- ------------------- ---------- -------- -------------------- -------- -----
| A| B| C| D| E| F| G| H| I| J| K| L| M| N| O| P| Q| R| S| T| U| V| W| X| Y| Z| AA| BB| CC| DD| EE| FF| GG| HH| II| JJ| KK| LL| MM| NN| OO| PP| QQ| RR| SS| TT| UU| VV| WW| XX| YY| ZZ| TGHJ| HG|EEE|ASD| EFFDCLDT|QSAS| WWW| DATIME| JOBNM| VFDCXS| REWE| XCVVCX|ASDFF|
--- --- ---- --- ---- -------------- --- ---------- ---------- --- --- ---------- ---------- ---------- -------------------- --- --- ------- --- -------- -------- --- --- --- --------- --- --- ---------- --- --- ---------- ---------- --- --- --- --- --- ---------- ---------- ------- --- ---------- ---------- ------ --- --- --- --- --- --- --- -------- ----- -------- --- --- ---------- ---- ------------- ------------------- ---------- -------- -------------------- -------- -----
| QW| 8|2344|H02|1002| | 1|2019-01-20|9999-12-31| | EE|2014-01-20|2014-01-20|2014-01-20|CNB22345 | IN| 9|1234444| | | | 10| QQ| 8|BMX10290M|EWR| |.000000000| 00| M |2027-01-20|2027-01-20| |.00|.00|.00|.00|2014-01-20|1901-01-01|3423.25| | | | | RE| WW| | RQ| | | | | | | | |1901-01-01| 0|SED2233345 |2019-01-15 22:10:23|213EDSFDS |78978775|2019-03-23 07:38:...| | null|
--- --- ---- --- ---- -------------- --- ---------- ---------- --- --- ---------- ---------- ---------- -------------------- --- --- ------- --- -------- -------- --- --- --- --------- --- --- ---------- --- --- ---------- ---------- --- --- --- --- --- ---------- ---------- ------- --- ---------- ---------- ------ --- --- --- --- --- --- --- -------- ----- -------- --- --- ---------- ---- ------------- ------------------- ---------- -------- -------------------- -------- -----
Без заголовка:
--- --- ---- --- ---- -------------- --- ---------- ---------- --- ---- ---------- ---------- ---------- -------------------- ---- ---- ------- ---- -------- -------- ---- ---- ---- --------- ---- ---- ---------- ---- ---- ---------- ---------- ---- ---- ---- ---- ---- ---------- ---------- ------- ---- ---------- ---------- ------ ---- ---- ---- ---- ---- ---- ---- -------- ----- -------- ---- ---- ---------- ---- ------------- ------------------- ---------- -------- -------------------- -------- -----
|_c0|_c1| _c2|_c3| _c4| _c5|_c6| _c7| _c8|_c9|_c10| _c11| _c12| _c13| _c14|_c15|_c16| _c17|_c18| _c19| _c20|_c21|_c22|_c23| _c24|_c25|_c26| _c27|_c28|_c29| _c30| _c31|_c32|_c33|_c34|_c35|_c36| _c37| _c38| _c39|_c40| _c41| _c42| _c43|_c44|_c45|_c46|_c47|_c48|_c49|_c50| _c51| _c52| _c53|_c54|_c55| _c56|_c57| _c58| _c59| _c60| _c61| _c62| _c63| _c64|
--- --- ---- --- ---- -------------- --- ---------- ---------- --- ---- ---------- ---------- ---------- -------------------- ---- ---- ------- ---- -------- -------- ---- ---- ---- --------- ---- ---- ---------- ---- ---- ---------- ---------- ---- ---- ---- ---- ---- ---------- ---------- ------- ---- ---------- ---------- ------ ---- ---- ---- ---- ---- ---- ---- -------- ----- -------- ---- ---- ---------- ---- ------------- ------------------- ---------- -------- -------------------- -------- -----
| A| B| C| D| E| F| G| H| I| J| K| L| M| N| O| P| Q| R| S| T| U| V| W| X| Y| Z| AA| BB| CC| DD| EE| FF| GG| HH| II| JJ| KK| LL| MM| NN| OO| PP| QQ| RR| SS| TT| UU| VV| WW| XX| YY| ZZ| TGHJ| HG| EEE| ASD| EFFDCLDT|QSAS| WWW| DATIME| JOBNM| VFDCXS| REWE| XCVVCX|ASDFF|
| QW| 8|2344|H02|1002| | 1|2019-01-20|9999-12-31| | EE|2014-01-20|2014-01-20|2014-01-20|CNB22345 | IN| 9|1234444| | | | 10| QQ| 8|BMX10290M| EWR| |.000000000| 00| M |2027-01-20|2027-01-20| | .00| .00| .00| .00|2014-01-20|1901-01-01|3423.25| | | | | RE| WW| | RQ| | | | | | | | |1901-01-01| 0|SED2233345 |2019-01-15 22:10:23|213EDSFDS |78978775|2019-03-23 07:38:...| | null|
--- --- ---- --- ---- -------------- --- ---------- ---------- --- ---- ---------- ---------- ---------- -------------------- ---- ---- ------- ---- -------- -------- ---- ---- ---- --------- ---- ---- ---------- ---- ---- ---------- ---------- ---- ---- ---- ---- ---- ---------- ---------- ------- ---- ---------- ---------- ------ ---- ---- ---- ---- ---- ---- ---- -------- ----- -------- ---- ---- ---------- ---- ------------- ------------------- ---------- -------- -------------------- -------- -----
build.sbt
"com.databricks" %% "spark-csv" % "1.5.0",
"org.apache.spark" %% "spark-core" % "2.2.2",
"org.apache.spark" %% "spark-sql" % "2.2.2"
Снимок экрана для ссылки. :
Надеюсь, это поможет!
Комментарии:
1. Я уже пробовал то же самое. Единственное отличие заключается в части inferschema.
2. И тот же код работает для других CSV-файлов безупречно.
3. @DasarathyDR Подходит ли вам мой ответ? Все еще сталкиваетесь с какими-либо проблемами?
4. Я вижу, что у меня есть некоторое несоответствие в моих входных бизнес-данных. Ваш ответ правильный. Потому что у меня не получается прочитать один конкретный файл. Остальные 3 файла работают без проблем.
5. Не могли бы вы, пожалуйста, принять ответ, если он правильный. Я надеюсь, что это поможет! Спасибо