I 이개월 마루 파일 2017_01.parquet 및 2017_08.parquet 그 스키마가 있습니다사용 스파크 SQL은 마루 형식으로 존재하지 않는 열을 읽어
2017_01.parquet :
root
|-- value: struct (nullable = true)
| |-- version: struct (nullable = true)
| | |-- major: integer (nullable = true)
| | |-- minor: integer (nullable = true)
| |-- guid: string (nullable = true)
2017_08.parquet :
root
|-- value: struct (nullable = true)
| |-- version: struct (nullable = true)
| | |-- major: integer (nullable = true)
| | |-- minor: integer (nullable = true)
| | |-- vnum: integer (nullable = true)
| |-- guid: string (nullable = true)
내 코드
+-----+-----+----+
|major|minor|vnum|
+-----+-----+----+
| 0001| 4610|1315|
| 0002| 4610|6206|
| 0003| 4610|6125|
하지만 parquetFile = spark.read.parquet("/mydata/2017_01.parquet")
SQL 쇼 오류처럼 2017_01.parquet로드하는 경우 :
pyspark.sql.utils.AnalysisException: u'No such struct field vnum in major, minor; line 4 pos 11'
나는 이유를 알고 내가 2017_08.parquet 쇼를로드
SQL = """
SELECT value.version.major,
value.version.minor,
value.version.vnum
FROM OUT_TABLE
LIMIT 10"""
parquetFile = spark.read.parquet("/mydata/2017_08.parquet")
parquetFile.createOrReplaceTempView("OUT_TABLE")
out_osce = spark.sql(SQL)
out_osce.show()
2017_01.parquet에 vnum 열이없고 두 개의 slove 솔루션이 있는데 하나는을 사용하고 있습니다. 0 또 다른 하나는 나무 마루 파일을 읽을 때 스키마를 사용하지만 그 방법도 큰 문제가 있습니다. 나는 그것이 문제가 될 것이며, 불운의 vnum이 옵션 열이며, 08이 열을 가지고 있지 않은 경우 여전히
에러 08의 데이터가 필요하지 않은 경우첫 번째 솔루션은 2017_08.parquet 읽을 필요
두 번째 솔루션은 spark.read.schema(schema).parquet("/mydata/2017_01.parquet")
과 같이 읽을 때 스키마가 주어지며, 먼저 스키마를 작성해야하지만 파일이 매우 복잡한 중첩 테이블 인 경우 사용자가 스키마를 작성할 수 없으며 스키마가 업데이트됩니다.
나는 사람이 그 다음 세 번째 솔루션을 물어 싶 읽기 전용 2017_01.parquet 및 출력 등의 : 읽을 때
+-----+-----+----+
|major|minor|vnum|
+-----+-----+----+
| 0001| 4600|null|
| 0002| 4600|null|
| 0003| 4600|null|
감사합니다. @himanshuIIITian이 좋습니다. –