programing

JSON 파일을 Spark로 읽을 때 _corrupt_record 오류가 발생함

showcode 2023. 3. 16. 22:03
반응형

JSON 파일을 Spark로 읽을 때 _corrupt_record 오류가 발생함

이 JSON 파일을 가지고 있습니다.

{
    "a": 1, 
    "b": 2
}

Python json.dump 메서드로 취득되었습니다.이제 이 파일을 pyspark를 사용하여 Spark의 DataFrame으로 읽어보겠습니다.설명서에 따라 이 작업을 수행합니다.

sc = SparkContext()

sqlc = SQLContext(sc)

df = sqlc.read.json my_file.json')

print df.show()

인쇄문에서는 다음과 같이 말하고 있습니다.

+---------------+
|_corrupt_record|
+---------------+
|              {|
|       "a": 1, |
|         "b": 2|
|              }|
+---------------+

무슨 일이 일어나고 있는지, 왜 파일이 올바르게 해석되지 않는지 아는 사람이 있습니까?

JSON 파일을 그대로 두는 경우(새 행 문자를 삭제하지 않음)\n)를 포함합니다.multiLine=True키워드 인수

sc = SparkContext() 
sqlc = SQLContext(sc)

df = sqlc.read.json('my_file.json', multiLine=True)

print df.show()

입력 파일의 행마다 하나의 json 개체가 있어야 합니다. http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader.json를 참조하십시오.

json 파일이 다음과 같은 경우 예상되는 데이터 프레임을 제공합니다.

{ "a": 1, "b": 2 }
{ "a": 3, "b": 4 }

....
df.show()
+---+---+
|  a|  b|
+---+---+
|  1|  2|
|  3|  4|
+---+---+

Spark 2.2+에서는 다음 명령을 사용하여 multiline의 json 파일을 읽을 수 있습니다.

val dataframe = spark.read.option("multiline",true).json( " filePath ")

한 줄에 json 객체가 있다면

val dataframe = spark.read.json(filepath)

@Bernhard의 훌륭한 답변에 추가

# original file was written with pretty-print inside a list
with open("pretty-printed.json") as jsonfile:
    js = json.load(jsonfile)      

# write a new file with one object per line
with open("flattened.json", 'a') as outfile:
    for d in js:
        json.dump(d, outfile)
        outfile.write('\n')

JSON 컬럼 String을 가지고 있지만 Python 표기법을 사용하고 있는 제 경험을 공유하겠습니다.이것은, Python 표기법을 사용하고 있는 것을 의미합니다.None대신null,False대신false그리고.True대신true.

이 열을 구문 분석할 때 스파크는 다음과 같은 열을 반환합니다._corrupt_record그래서 JSON String을 해석하기 전에 Python 표기법을 표준 JSON 표기법으로 대체해야 했습니다.

df.withColumn("json_notation",
    F.regexp_replace(F.regexp_replace(F.regexp_replace("_corrupt_record", "None", "null"), "False", "false") ,"True", "true")

이 변환 후에 나는 예를 들어 함수를 사용할 수 있었다.F.from_json()에서json_notation여기서 Pyspark는 JSON 객체를 올바르게 해석할 수 있었습니다.

이 문제가 발생하는 또 다른 이유는 파일 부호화일 수 있습니다.읽고 있는 파일이 예를 들어 라틴 인코딩으로 되어 있는 경우, 이 문제가 발생합니다.파일을 읽을 때 .option("encoding", "cp1252")을 사용해 보십시오.이것으로 문제가 해결되었습니다.

언급URL : https://stackoverflow.com/questions/35409539/corrupt-record-error-when-reading-a-json-file-into-spark

반응형