This is an automated email from the ASF dual-hosted git repository.

chesnay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new e0f4a0ca927 [FLINK-28808][csv] Create mapper on server-side
e0f4a0ca927 is described below

commit e0f4a0ca9271f0e9e31011578dbdea4b5a8d30fe
Author: Chesnay Schepler <[email protected]>
AuthorDate: Fri Aug 5 19:16:57 2022 +0200

    [FLINK-28808][csv] Create mapper on server-side
---
 .../flink/formats/csv/CsvFileFormatFactory.java    | 27 ++++++++++++----------
 .../flink/formats/csv/RowDataToCsvConverters.java  |  2 +-
 flink-python/pom.xml                               |  6 +++++
 flink-python/pyflink/datastream/formats/csv.py     | 12 ++--------
 .../apache/flink/formats/csv/PythonCsvUtils.java   | 10 ++++----
 5 files changed, 30 insertions(+), 27 deletions(-)

diff --git 
a/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvFileFormatFactory.java
 
b/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvFileFormatFactory.java
index 391e1c49f20..b0a0b27d5e7 100644
--- 
a/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvFileFormatFactory.java
+++ 
b/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/CsvFileFormatFactory.java
@@ -163,18 +163,7 @@ public class CsvFileFormatFactory implements 
BulkReaderFormatFactory, BulkWriter
                 final RowType rowType = (RowType) 
physicalDataType.getLogicalType();
                 final CsvSchema schema = buildCsvSchema(rowType, 
formatOptions);
 
-                final RowDataToCsvConverter converter =
-                        RowDataToCsvConverters.createRowConverter(rowType);
-
-                final CsvMapper mapper = new CsvMapper();
-                final ObjectNode container = mapper.createObjectNode();
-
-                final RowDataToCsvConverter.RowDataToCsvFormatConverterContext 
converterContext =
-                        new 
RowDataToCsvConverter.RowDataToCsvFormatConverterContext(
-                                mapper, container);
-
-                return out ->
-                        CsvBulkWriter.forSchema(mapper, schema, converter, 
converterContext, out);
+                return createCsvBulkWriterFactory(schema, rowType);
             }
 
             @Override
@@ -184,6 +173,20 @@ public class CsvFileFormatFactory implements 
BulkReaderFormatFactory, BulkWriter
         };
     }
 
+    static BulkWriter.Factory<RowData> createCsvBulkWriterFactory(
+            CsvSchema schema, RowType rowType) {
+        final RowDataToCsvConverter converter = 
RowDataToCsvConverters.createRowConverter(rowType);
+
+        return out -> {
+            final CsvMapper mapper = new CsvMapper();
+            final ObjectNode container = mapper.createObjectNode();
+
+            final RowDataToCsvConverter.RowDataToCsvFormatConverterContext 
converterContext =
+                    new 
RowDataToCsvConverter.RowDataToCsvFormatConverterContext(mapper, container);
+            return CsvBulkWriter.forSchema(mapper, schema, converter, 
converterContext, out);
+        };
+    }
+
     private static CsvSchema buildCsvSchema(RowType rowType, ReadableConfig 
options) {
         final CsvSchema csvSchema = CsvRowSchemaConverter.convert(rowType);
         final CsvSchema.Builder csvBuilder = csvSchema.rebuild();
diff --git 
a/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/RowDataToCsvConverters.java
 
b/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/RowDataToCsvConverters.java
index 693e89198e2..8d689086558 100644
--- 
a/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/RowDataToCsvConverters.java
+++ 
b/flink-formats/flink-csv/src/main/java/org/apache/flink/formats/csv/RowDataToCsvConverters.java
@@ -65,7 +65,7 @@ public class RowDataToCsvConverters implements Serializable {
          * Converter context for passing the {@code CsvMapper} and the {@code 
container} that can be
          * reused between transformations of the individual elements for 
performance reasons.
          */
-        class RowDataToCsvFormatConverterContext implements Serializable {
+        class RowDataToCsvFormatConverterContext {
             CsvMapper csvMapper;
             ContainerNode<?> container;
 
diff --git a/flink-python/pom.xml b/flink-python/pom.xml
index 2ee84a9078d..6d5b18385b3 100644
--- a/flink-python/pom.xml
+++ b/flink-python/pom.xml
@@ -77,6 +77,12 @@ under the License.
                        <version>${project.version}</version>
                        <scope>provided</scope>
                </dependency>
+               <dependency>
+                       <groupId>org.apache.flink</groupId>
+                       <artifactId>flink-connector-files</artifactId>
+                       <version>${project.version}</version>
+                       <scope>provided</scope>
+               </dependency>
                <dependency>
                        <groupId>org.apache.flink</groupId>
                        <artifactId>flink-csv</artifactId>
diff --git a/flink-python/pyflink/datastream/formats/csv.py 
b/flink-python/pyflink/datastream/formats/csv.py
index e475684035c..e5d18dd2309 100644
--- a/flink-python/pyflink/datastream/formats/csv.py
+++ b/flink-python/pyflink/datastream/formats/csv.py
@@ -340,17 +340,9 @@ class CsvBulkWriter(object):
         Builds a :class:`BulkWriterFactory` for writing records to files in 
CSV format.
         """
         jvm = get_gateway().jvm
-        jackson = jvm.org.apache.flink.shaded.jackson2.com.fasterxml.jackson
         csv = jvm.org.apache.flink.formats.csv
 
-        j_converter = csv.RowDataToCsvConverters.createRowConverter(
-            _to_java_data_type(schema._row_type).getLogicalType())
-        j_mapper = jackson.dataformat.csv.CsvMapper()
-        j_container = j_mapper.createObjectNode()
-        j_context = 
csv.PythonCsvUtils.createRowDataToCsvFormatConverterContext(
-            j_mapper, j_container)
-
         j_factory = csv.PythonCsvUtils.createCsvBulkWriterFactory(
-            j_mapper, schema._j_schema, j_converter, j_context
-        )
+            schema._j_schema,
+            _to_java_data_type(schema._row_type))
         return RowDataBulkWriterFactory(j_factory, schema._row_type)
diff --git 
a/flink-python/src/main/java/org/apache/flink/formats/csv/PythonCsvUtils.java 
b/flink-python/src/main/java/org/apache/flink/formats/csv/PythonCsvUtils.java
index 8202d46c800..08c08a80318 100644
--- 
a/flink-python/src/main/java/org/apache/flink/formats/csv/PythonCsvUtils.java
+++ 
b/flink-python/src/main/java/org/apache/flink/formats/csv/PythonCsvUtils.java
@@ -18,7 +18,7 @@
 package org.apache.flink.formats.csv;
 
 import org.apache.flink.api.common.serialization.BulkWriter;
-import org.apache.flink.formats.common.Converter;
+import org.apache.flink.table.data.RowData;
 import org.apache.flink.table.runtime.typeutils.InternalTypeInfo;
 import org.apache.flink.table.types.DataType;
 import org.apache.flink.table.types.logical.RowType;
@@ -62,8 +62,10 @@ public class PythonCsvUtils {
     /**
      * Util for creating a {@link BulkWriter.Factory} that wraps {@link 
CsvBulkWriter#forSchema}.
      */
-    public static <T, R, C> BulkWriter.Factory<T> createCsvBulkWriterFactory(
-            CsvMapper mapper, CsvSchema schema, Converter<T, R, C> converter, 
C converterContext) {
-        return (out) -> CsvBulkWriter.forSchema(mapper, schema, converter, 
converterContext, out);
+    public static BulkWriter.Factory<RowData> createCsvBulkWriterFactory(
+            CsvSchema schema, DataType physicalDataType) {
+
+        return CsvFileFormatFactory.createCsvBulkWriterFactory(
+                schema, (RowType) physicalDataType.getLogicalType());
     }
 }

Reply via email to