You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@iceberg.apache.org by GitBox <gi...@apache.org> on 2020/06/17 21:32:54 UTC

[GitHub] [iceberg] rdblue opened a new pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

rdblue opened a new pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122


   This is the next step to integrate the spark-3 branch into master. This PR moves classes that depend on DSv2 in Spark 2.x into the spark2 module.
   
   The `RewriteDataFilesAction` used Spark reader and writers in its implementation, so this needed to also refactor those classes. This moves writer implementations out of `Writer` to top-level classes, and removes the DSv2 interfaces so that the rewrite action can use the same reader and writer code without a dependency on a DSv2 API. This refactor is a good preparation step because this should be shared between the spark2 and spark3 modules.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue commented on a change in pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

Posted by GitBox <gi...@apache.org>.
rdblue commented on a change in pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122#discussion_r441847321



##########
File path: spark2/src/main/java/org/apache/iceberg/spark/source/Reader.java
##########
@@ -480,41 +479,21 @@ private InternalRowReaderFactory() {
     public InputPartitionReader<ColumnarBatch> create(CombinedScanTask task, Schema tableSchema, Schema expectedSchema,
                                                       String nameMapping, FileIO io,
                                                       EncryptionManager encryptionManager, boolean caseSensitive) {
-      return new BatchDataReader(task, expectedSchema, nameMapping, io, encryptionManager, caseSensitive, batchSize);
+      return new BatchReader(task, expectedSchema, nameMapping, io, encryptionManager, caseSensitive, batchSize);
     }
   }
 
-  private static class StructLikeInternalRow implements StructLike {

Review comment:
       This class is not used, so I removed it.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue commented on a change in pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

Posted by GitBox <gi...@apache.org>.
rdblue commented on a change in pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122#discussion_r441847491



##########
File path: spark2/src/main/java/org/apache/iceberg/spark/source/Reader.java
##########
@@ -396,8 +396,7 @@ public String toString() {
 
     private transient Schema tableSchema = null;
     private transient Schema expectedSchema = null;
-    private transient NameMapping nameMapping = null;

Review comment:
       This wasn't used. The name mapping string is passed instead.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] jerryshao commented on a change in pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

Posted by GitBox <gi...@apache.org>.
jerryshao commented on a change in pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122#discussion_r442168821



##########
File path: spark/src/main/java/org/apache/iceberg/spark/source/BaseWriter.java
##########
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iceberg.spark.source;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.List;
+import org.apache.iceberg.DataFile;
+import org.apache.iceberg.DataFiles;
+import org.apache.iceberg.FileFormat;
+import org.apache.iceberg.Metrics;
+import org.apache.iceberg.PartitionSpec;
+import org.apache.iceberg.encryption.EncryptedOutputFile;
+import org.apache.iceberg.io.FileAppender;
+import org.apache.iceberg.io.FileIO;
+import org.apache.iceberg.relocated.com.google.common.collect.Lists;
+import org.apache.iceberg.util.Tasks;
+import org.apache.spark.sql.catalyst.InternalRow;
+
+abstract class BaseWriter implements Closeable {
+  protected static final int ROWS_DIVISOR = 1000;
+
+  private final List<DataFile> completedFiles = Lists.newArrayList();
+  private final PartitionSpec spec;
+  private final FileFormat format;
+  private final SparkAppenderFactory appenderFactory;
+  private final OutputFileFactory fileFactory;
+  private final FileIO io;
+  private final long targetFileSize;
+  private PartitionKey currentKey = null;
+  private FileAppender<InternalRow> currentAppender = null;
+  private EncryptedOutputFile currentFile = null;
+  private long currentRows = 0;
+
+  BaseWriter(PartitionSpec spec, FileFormat format, SparkAppenderFactory appenderFactory,
+             OutputFileFactory fileFactory, FileIO io, long targetFileSize) {
+    this.spec = spec;
+    this.format = format;
+    this.appenderFactory = appenderFactory;
+    this.fileFactory = fileFactory;
+    this.io = io;
+    this.targetFileSize = targetFileSize;
+  }
+
+  public abstract void write(InternalRow row) throws IOException;

Review comment:
       IIUC, both spark2 and spark3 will rely on this code, and this code requires one specific Spark dependency about the `InternalRow`, will this potentially go into an issue that has two versions of spark dependencies in Spark3 module?
   
   Also if the signature of `InternalRow` of Spark2 and Spark3 is different, will this lead to an issue?




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue commented on a change in pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

Posted by GitBox <gi...@apache.org>.
rdblue commented on a change in pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122#discussion_r443020650



##########
File path: spark/src/main/java/org/apache/iceberg/spark/source/BaseWriter.java
##########
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iceberg.spark.source;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.List;
+import org.apache.iceberg.DataFile;
+import org.apache.iceberg.DataFiles;
+import org.apache.iceberg.FileFormat;
+import org.apache.iceberg.Metrics;
+import org.apache.iceberg.PartitionSpec;
+import org.apache.iceberg.encryption.EncryptedOutputFile;
+import org.apache.iceberg.io.FileAppender;
+import org.apache.iceberg.io.FileIO;
+import org.apache.iceberg.relocated.com.google.common.collect.Lists;
+import org.apache.iceberg.util.Tasks;
+import org.apache.spark.sql.catalyst.InternalRow;
+
+abstract class BaseWriter implements Closeable {
+  protected static final int ROWS_DIVISOR = 1000;
+
+  private final List<DataFile> completedFiles = Lists.newArrayList();
+  private final PartitionSpec spec;
+  private final FileFormat format;
+  private final SparkAppenderFactory appenderFactory;
+  private final OutputFileFactory fileFactory;
+  private final FileIO io;
+  private final long targetFileSize;
+  private PartitionKey currentKey = null;
+  private FileAppender<InternalRow> currentAppender = null;
+  private EncryptedOutputFile currentFile = null;
+  private long currentRows = 0;
+
+  BaseWriter(PartitionSpec spec, FileFormat format, SparkAppenderFactory appenderFactory,
+             OutputFileFactory fileFactory, FileIO io, long targetFileSize) {
+    this.spec = spec;
+    this.format = format;
+    this.appenderFactory = appenderFactory;
+    this.fileFactory = fileFactory;
+    this.io = io;
+    this.targetFileSize = targetFileSize;
+  }
+
+  public abstract void write(InternalRow row) throws IOException;

Review comment:
       Yes. The alternative is to have two copies of everything, which I think isn't worth it. This API is unlikely to change between Spark versions because it is relied upon so heavily in Spark. I think it should be fine as long as we have thorough testing to catch any issues.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] jerryshao commented on pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

Posted by GitBox <gi...@apache.org>.
jerryshao commented on pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122#issuecomment-646477747


   LGTM!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue merged pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

Posted by GitBox <gi...@apache.org>.
rdblue merged pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org


[GitHub] [iceberg] rdblue commented on pull request #1122: Move classes that depend on DSv2 in Spark 2.x to spark2

Posted by GitBox <gi...@apache.org>.
rdblue commented on pull request #1122:
URL: https://github.com/apache/iceberg/pull/1122#issuecomment-646855292


   Thanks for reviewing! I'll get the tests fixed up and get this in.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@iceberg.apache.org
For additional commands, e-mail: issues-help@iceberg.apache.org