NPE in ParquetInputFormat.getSplits when no .parquet files exist
- Ngôn ngữ chính
- Java
- Star
- 3.1k
- Fork
- 1.6k
- Merge trung bình
- 3 ngày 12 giờ
- Pull request đã merge (30 ngày)
- 33
Mô tả
```Java
JavaSparkContext context = ...
JavaRDD rdd1 = context.parallelize(ImmutableList. of());
SQLContext sqlContext = new SQLContext(context);
StructType schema = DataTypes.createStructType(ImmutableList.of(DataTypes.createStructField("col1", DataTypes.StringType, true)));
DataFrame df = sqlContext.createDataFrame(rdd1, schema);
String url = "file:///tmp/emptyRDD";
df.saveAsParquetFile(url);
Configuration configuration = SparkHadoopUtil.get().newConfiguration(context.getConf());
JobConf jobConf = new JobConf(configuration);
ParquetInputFormat.setReadSupportClass(jobConf, RowReadSupport.class);
FileInputFormat.setInputPaths(jobConf, url);
JavaRDD rdd2 = context.newAPIHadoopRDD(
jobConf, ParquetInputFormat.class, Void.class, Row.class).values();
rdd2.count();
df = sqlContext.createDataFrame(rdd2, schema);
url = "file:///tmp/emptyRDD2";
df.saveAsParquetFile(url);
FileInputFormat.setInputPaths(jobConf, url);
JavaRDD rdd3 = context.newAPIHadoopRDD(
jobConf, ParquetInputFormat.class, Void.class, Row.class).values();
rdd3.count();
```
The NPE happens here:
```Java
java.lang.NullPointerException
at parquet.hadoop.ParquetInputFormat.getSplits(ParquetInputFormat.java:263)
at parquet.hadoop.ParquetInputFormat.getSplits(ParquetInputFormat.java:245)
at org.apache.spark.rdd.NewHadoopRDD.getPartitions(NewHadoopRDD.scala:95)
```
This stems from ParquetFileWriter.getGlobalMetaData returning null when there are no footers to read.
**Reporter**: [Paul Nepywoda](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=pnepywoda)
**Note**: *This issue was originally created as [PARQUET-294](https://issues.apache.org/jira/browse/PARQUET-294). Please see the [migration documentation](https://issues.apache.org/jira/browse/PARQUET-2502) for further details.*
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu với ParquetInputFormat.getSplits và theo dõi cách ParquetFileWriter.getGlobalMetaData được xử lý khi không tìm thấy footer nào. Tái hiện chuỗi empty-RDD được cung cấp và xác minh rằng cả rdd2.count() và rdd3.count() đều hoàn tất mà không xảy ra NullPointerException.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- data-engineering
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 35/100