Как прочитать файл не-UTF-8 в AWS Glue PySpark? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть клеевая схема, которая работает для большинства CSV.но иногда клиенты загружают CSV с полями в кодировке CP1252.Когда я пытаюсь сделать что-нибудь с dynamicFrame из такого файла, я получаю сообщение об ошибке: datasource0.toDF().show(1)

An error occurred while calling o221.toDF.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 5.0 failed 4 times, most recent failure: Lost task 1.3 in stage 5.0 (TID 17, ip-172-31-11-73.ec2.internal, executor 2): com.amazonaws.services.glue.util.FatalException: Unable to parse file: xxxx11142018.csv

Я пытался декодировать / кодировать каждую строку.но это не работает:

def sanitizeString(rawValue):
    value = re.sub('\\s+', ' ', rawValue)
    value = re.sub('\\\\', '', value)
    value = value.decode('CP1252').encode('utf-8')
    return value

def sanitizeLine(rawLine):
    line = rawLine.map(sanitizeString)

datasourceRaw = glueContext.create_dynamic_frame.from_catalog(database = "glue_db", table_name = "glue_table", transformation_ctx = "datasourceRaw")
datasource0 = datasourceRaw.map(sanitizeLine)
# datasource3.toDF().show(1)

Это выдает точно такую ​​же ошибку

Я также пытался загрузить его через RDD, используя

rdd0 = sc.textFile(filepath, use_unicode=False)
rdd0 = rdd0.map(sanitizeLine) # have to add an extra line to sanitizeLine() to split() the line
rdd0.toDF().show(2)

, это работает, но есть 2 проблемы:

  1. По какой-то причине, это waaayy медленнее, чем при использовании DynamicFrame
  2. Это дает мне всю строку в виде строки для отображения.Я полагаю, что могу разделить на ,, но затем я хочу превратить его обратно в DynamicFrame, и для этого мне нужна схема.Я попытался получить это из каталога, но (как вы уже догадались), я получаю ту же ошибку:

-

datasourceRaw = glueContext.create_dynamic_frame.from_catalog(database = "glue_db", table_name = "glue_table", transformation_ctx = "datasourceRaw")
print datasourceRaw.schema()

An error occurred while calling o434.schema.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 9.0 failed 4 times, most recent failure: Lost task 1.3 in stage 9.0 (TID 47, ip-172-31-11-73.ec2.internal, executor 5): com.amazonaws.services.glue.util.FatalException: Unable to parse file: xxxx_11142018.csv
...