This is an automated email from the ASF dual-hosted git repository.
agrove pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git
The following commit(s) were added to refs/heads/main by this push:
new 6051232a feat: Add specific configs for converting Spark Parquet and
JSON data to Arrow (#832)
6051232a is described below
commit 6051232ae76f7dd0b7797f8bb23a4133332768e4
Author: Andy Grove <[email protected]>
AuthorDate: Fri Aug 16 06:46:17 2024 -0600
feat: Add specific configs for converting Spark Parquet and JSON data to
Arrow (#832)
* Add option to enable JSON scan
* support v1 and v2 data sources
* formatting
* format
* Add schema check
* fix regression
* improve configs and docs
* fix
* improve test and fix typo in doc
* renaming some variables but no change to public config names
* improve test
* improve test
* Update
spark/src/main/scala/org/apache/comet/CometSparkSessionExtensions.scala
Co-authored-by: Liang-Chi Hsieh <[email protected]>
* Update
spark/src/main/scala/org/apache/comet/CometSparkSessionExtensions.scala
Co-authored-by: Liang-Chi Hsieh <[email protected]>
* improve config description
* fix path
---------
Co-authored-by: Liang-Chi Hsieh <[email protected]>
---
.../main/scala/org/apache/comet/CometConf.scala | 38 +++++++++++++-----
docs/source/index.rst | 5 ++-
docs/source/user-guide/configs.md | 6 ++-
docs/source/user-guide/datasources.md | 32 +++++++++++++++
docs/source/user-guide/operators.md | 27 +++++++------
.../apache/comet/CometSparkSessionExtensions.scala | 39 ++++++++++++++++---
.../test/resources/test-data/json-test-1.ndjson | 4 ++
.../org/apache/comet/CometExpressionSuite.scala | 45 ++++++++++++----------
.../comet/exec/CometColumnarShuffleSuite.scala | 2 +-
.../org/apache/comet/exec/CometExecSuite.scala | 14 +++++++
.../scala/org/apache/spark/sql/CometTestBase.scala | 2 +-
11 files changed, 158 insertions(+), 56 deletions(-)
diff --git a/common/src/main/scala/org/apache/comet/CometConf.scala
b/common/src/main/scala/org/apache/comet/CometConf.scala
index 1db80298..324c1d02 100644
--- a/common/src/main/scala/org/apache/comet/CometConf.scala
+++ b/common/src/main/scala/org/apache/comet/CometConf.scala
@@ -84,15 +84,33 @@ object CometConf extends ShimCometConf {
.booleanConf
.createWithDefault(sys.env.getOrElse("ENABLE_COMET", "true").toBoolean)
- val COMET_SCAN_ENABLED: ConfigEntry[Boolean] =
conf("spark.comet.scan.enabled")
+ val COMET_NATIVE_SCAN_ENABLED: ConfigEntry[Boolean] =
conf("spark.comet.scan.enabled")
.doc(
- "Whether to enable Comet scan. When this is turned on, Spark will use
Comet to read " +
- "Parquet data source. Note that to enable native vectorized execution,
both this " +
- "config and 'spark.comet.exec.enabled' need to be enabled. By default,
this config " +
- "is true.")
+ "Whether to enable native scans. When this is turned on, Spark will use
Comet to " +
+ "read supported data sources (currently only Parquet is supported
natively). Note " +
+ "that to enable native vectorized execution, both this config and " +
+ "'spark.comet.exec.enabled' need to be enabled. By default, this
config is true.")
.booleanConf
.createWithDefault(true)
+ val COMET_CONVERT_FROM_PARQUET_ENABLED: ConfigEntry[Boolean] =
+ conf("spark.comet.convert.parquet.enabled")
+ .doc(
+ "When enabled, data from Spark (non-native) Parquet v1 and v2 scans
will be converted to " +
+ "Arrow format. Note that to enable native vectorized execution, both
this config and " +
+ "'spark.comet.exec.enabled' need to be enabled.")
+ .booleanConf
+ .createWithDefault(false)
+
+ val COMET_CONVERT_FROM_JSON_ENABLED: ConfigEntry[Boolean] =
+ conf("spark.comet.convert.json.enabled")
+ .doc(
+ "When enabled, data from Spark (non-native) JSON v1 and v2 scans will
be converted to " +
+ "Arrow format. Note that to enable native vectorized execution, both
this config and " +
+ "'spark.comet.exec.enabled' need to be enabled.")
+ .booleanConf
+ .createWithDefault(false)
+
val COMET_EXEC_ENABLED: ConfigEntry[Boolean] =
conf(s"$COMET_EXEC_CONFIG_PREFIX.enabled")
.doc(
"Whether to enable Comet native vectorized execution for Spark. This
controls whether " +
@@ -457,20 +475,20 @@ object CometConf extends ShimCometConf {
.booleanConf
.createWithDefault(COMET_SCHEMA_EVOLUTION_ENABLED_DEFAULT)
- val COMET_SPARK_TO_COLUMNAR_ENABLED: ConfigEntry[Boolean] =
+ val COMET_SPARK_TO_ARROW_ENABLED: ConfigEntry[Boolean] =
conf("spark.comet.sparkToColumnar.enabled")
.internal()
- .doc("Whether to enable Spark to Comet columnar conversion. When this is
turned on, " +
+ .doc("Whether to enable Spark to Arrow columnar conversion. When this is
turned on, " +
"Comet will convert operators in " +
- "`spark.comet.sparkToColumnar.supportedOperatorList` into Comet
columnar based before " +
+ "`spark.comet.sparkToColumnar.supportedOperatorList` into Arrow
columnar format before " +
"processing.")
.booleanConf
.createWithDefault(false)
- val COMET_SPARK_TO_COLUMNAR_SUPPORTED_OPERATOR_LIST:
ConfigEntry[Seq[String]] =
+ val COMET_SPARK_TO_ARROW_SUPPORTED_OPERATOR_LIST: ConfigEntry[Seq[String]] =
conf("spark.comet.sparkToColumnar.supportedOperatorList")
.doc(
- "A comma-separated list of operators that will be converted to Comet
columnar " +
+ "A comma-separated list of operators that will be converted to Arrow
columnar " +
"format when 'spark.comet.sparkToColumnar.enabled' is true")
.stringConf
.toSequence
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 101c5785..4bf5d9fd 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -42,9 +42,10 @@ as a native runtime to achieve improvement in terms of query
efficiency and quer
Comet Overview <user-guide/overview>
Installing Comet <user-guide/installation>
- Supported Expressions <user-guide/expressions>
- Supported Operators <user-guide/operators>
+ Supported Data Sources <user-guide/datasources>
Supported Data Types <user-guide/datatypes>
+ Supported Operators <user-guide/operators>
+ Supported Expressions <user-guide/expressions>
Configuration Settings <user-guide/configs>
Compatibility Guide <user-guide/compatibility>
Tuning Guide <user-guide/tuning>
diff --git a/docs/source/user-guide/configs.md
b/docs/source/user-guide/configs.md
index 836f6444..8465baa7 100644
--- a/docs/source/user-guide/configs.md
+++ b/docs/source/user-guide/configs.md
@@ -30,6 +30,8 @@ Comet provides the following configuration settings.
| spark.comet.columnar.shuffle.async.max.thread.num | Maximum number of
threads on an executor used for Comet async columnar shuffle. By default, this
config is 100. This is the upper bound of total number of shuffle threads per
executor. In other words, if the number of cores * the number of shuffle
threads per task `spark.comet.columnar.shuffle.async.thread.num` is larger than
this config. Comet will use this config as the number of shuffle threads per
executor instead. | 100 |
| spark.comet.columnar.shuffle.async.thread.num | Number of threads used for
Comet async columnar shuffle per shuffle task. By default, this config is 3.
Note that more threads means more memory requirement to buffer shuffle data
before flushing to disk. Also, more threads may not always improve performance,
and should be set based on the number of cores available. | 3 |
| spark.comet.columnar.shuffle.memory.factor | Fraction of Comet memory to be
allocated per executor process for Comet shuffle. Comet memory size is
specified by `spark.comet.memoryOverhead` or calculated by
`spark.comet.memory.overhead.factor` * `spark.executor.memory`. By default,
this config is 1.0. | 1.0 |
+| spark.comet.convert.json.enabled | When enabled, data from Spark
(non-native) JSON v1 and v2 scans will be converted to Arrow format. Note that
to enable native vectorized execution, both this config and
'spark.comet.exec.enabled' need to be enabled. | false |
+| spark.comet.convert.parquet.enabled | When enabled, data from Spark
(non-native) Parquet v1 and v2 scans will be converted to Arrow format. Note
that to enable native vectorized execution, both this config and
'spark.comet.exec.enabled' need to be enabled. | false |
| spark.comet.debug.enabled | Whether to enable debug mode for Comet. By
default, this config is false. When enabled, Comet will do additional checks
for debugging purpose. For example, validating array when importing arrays from
JVM at native side. Note that these checks may be expensive in performance and
should only be enabled for debugging purpose. | false |
| spark.comet.enabled | Whether to enable Comet extension for Spark. When this
is turned on, Spark will use Comet to read Parquet data source. Note that to
enable native vectorized execution, both this config and
'spark.comet.exec.enabled' need to be enabled. By default, this config is the
value of the env var `ENABLE_COMET` if set, or true otherwise. | true |
| spark.comet.exceptionOnDatetimeRebase | Whether to throw exception when
seeing dates/timestamps from the legacy hybrid (Julian + Gregorian) calendar.
Since Spark 3, dates/timestamps were written according to the Proleptic
Gregorian calendar. When this is true, Comet will throw exceptions when seeing
these dates/timestamps that were written by Spark version before 3.0. If this
is false, these dates/timestamps will be read as if they were written to the
Proleptic Gregorian calendar and w [...]
@@ -64,8 +66,8 @@ Comet provides the following configuration settings.
| spark.comet.nativeLoadRequired | Whether to require Comet native library to
load successfully when Comet is enabled. If not, Comet will silently fallback
to Spark when it fails to load the native lib. Otherwise, an error will be
thrown and the Spark job will be aborted. | false |
| spark.comet.parquet.enable.directBuffer | Whether to use Java direct byte
buffer when reading Parquet. By default, this is false | false |
| spark.comet.regexp.allowIncompatible | Comet is not currently fully
compatible with Spark for all regular expressions. Set this config to true to
allow them anyway using Rust's regular expression engine. See compatibility
guide for more information. | false |
-| spark.comet.scan.enabled | Whether to enable Comet scan. When this is turned
on, Spark will use Comet to read Parquet data source. Note that to enable
native vectorized execution, both this config and 'spark.comet.exec.enabled'
need to be enabled. By default, this config is true. | true |
+| spark.comet.scan.enabled | Whether to enable native scans. When this is
turned on, Spark will use Comet to read supported data sources (currently only
Parquet is supported natively). Note that to enable native vectorized
execution, both this config and 'spark.comet.exec.enabled' need to be enabled.
By default, this config is true. | true |
| spark.comet.scan.preFetch.enabled | Whether to enable pre-fetching feature
of CometScan. By default is disabled. | false |
| spark.comet.scan.preFetch.threadNum | The number of threads running
pre-fetching for CometScan. Effective if spark.comet.scan.preFetch.enabled is
enabled. By default it is 2. Note that more pre-fetching threads means more
memory requirement to store pre-fetched row groups. | 2 |
| spark.comet.shuffle.preferDictionary.ratio | The ratio of total values to
distinct values in a string column to decide whether to prefer dictionary
encoding when shuffling the column. If the ratio is higher than this config,
dictionary encoding will be used on shuffling string column. This config is
effective if it is higher than 1.0. By default, this config is 10.0. Note that
this config is only used when `spark.comet.exec.shuffle.mode` is `jvm`. | 10.0 |
-| spark.comet.sparkToColumnar.supportedOperatorList | A comma-separated list
of operators that will be converted to Comet columnar format when
'spark.comet.sparkToColumnar.enabled' is true | Range,InMemoryTableScan |
+| spark.comet.sparkToColumnar.supportedOperatorList | A comma-separated list
of operators that will be converted to Arrow columnar format when
'spark.comet.sparkToColumnar.enabled' is true | Range,InMemoryTableScan |
diff --git a/docs/source/user-guide/datasources.md
b/docs/source/user-guide/datasources.md
new file mode 100644
index 00000000..92c13f67
--- /dev/null
+++ b/docs/source/user-guide/datasources.md
@@ -0,0 +1,32 @@
+<!---
+ 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.
+-->
+
+# Supported Spark Data Sources
+
+## Parquet
+
+When `spark.comet.scan.enabled` is enabled, Parquet scans will be performed
natively by Comet if all data types
+in the schema are supported. When this option is not enabled, the scan will
fall back to Spark. In this case,
+enabling `spark.comet.convert.parquet.enabled` will immediately convert the
data into Arrow format, allowing native
+execution to happen after that, but the process may not be efficient.
+
+## JSON
+
+Comet does not provide native JSON scan, but when
`spark.comet.convert.json.enabled` is enabled, data is immediately
+converted into Arrow format, allowing native execution to happen after that.
diff --git a/docs/source/user-guide/operators.md
b/docs/source/user-guide/operators.md
index e3a3ac52..7edbb1e7 100644
--- a/docs/source/user-guide/operators.md
+++ b/docs/source/user-guide/operators.md
@@ -22,17 +22,16 @@
The following Spark operators are currently replaced with native versions.
Query stages that contain any operators
not supported by Comet will fall back to regular Spark execution.
-| Operator | Notes |
-| -------------------------------------------- | ----- |
-| FileSourceScanExec/BatchScanExec for Parquet | |
-| Projection | |
-| Filter | |
-| Sort | |
-| Hash Aggregate | |
-| Limit | |
-| Sort-merge Join | |
-| Hash Join | |
-| BroadcastHashJoinExec | |
-| Shuffle | |
-| Expand | |
-| Union | |
+| Operator | Notes |
+| --------------------- | ----- |
+| Projection | |
+| Filter | |
+| Sort | |
+| Hash Aggregate | |
+| Limit | |
+| Sort-merge Join | |
+| Hash Join | |
+| BroadcastHashJoinExec | |
+| Shuffle | |
+| Expand | |
+| Union | |
diff --git
a/spark/src/main/scala/org/apache/comet/CometSparkSessionExtensions.scala
b/spark/src/main/scala/org/apache/comet/CometSparkSessionExtensions.scala
index f24624dc..e978e7d3 100644
--- a/spark/src/main/scala/org/apache/comet/CometSparkSessionExtensions.scala
+++ b/spark/src/main/scala/org/apache/comet/CometSparkSessionExtensions.scala
@@ -35,8 +35,10 @@ import org.apache.spark.sql.execution._
import org.apache.spark.sql.execution.adaptive.{AQEShuffleReadExec,
BroadcastQueryStageExec, ShuffleQueryStageExec}
import org.apache.spark.sql.execution.aggregate.HashAggregateExec
import org.apache.spark.sql.execution.datasources._
+import org.apache.spark.sql.execution.datasources.json.JsonFileFormat
import org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat
import org.apache.spark.sql.execution.datasources.v2.BatchScanExec
+import org.apache.spark.sql.execution.datasources.v2.json.JsonScan
import org.apache.spark.sql.execution.datasources.v2.parquet.ParquetScan
import org.apache.spark.sql.execution.exchange.{BroadcastExchangeExec,
ReusedExchangeExec, ShuffleExchangeExec}
import org.apache.spark.sql.execution.joins.{BroadcastHashJoinExec,
ShuffledHashJoinExec, SortMergeJoinExec}
@@ -1095,7 +1097,7 @@ object CometSparkSessionExtensions extends Logging {
}
private[comet] def isCometScanEnabled(conf: SQLConf): Boolean = {
- COMET_SCAN_ENABLED.get(conf)
+ COMET_NATIVE_SCAN_ENABLED.get(conf)
}
private[comet] def isCometExecEnabled(conf: SQLConf): Boolean = {
@@ -1131,12 +1133,39 @@ object CometSparkSessionExtensions extends Logging {
// operators can have a chance to be converted to columnar. Leaf operators
that output
// columnar batches, such as Spark's vectorized readers, will also be
converted to native
// comet batches.
- // TODO: consider converting other intermediate operators to columnar.
- op.isInstanceOf[LeafExecNode] &&
CometSparkToColumnarExec.isSchemaSupported(op.schema) &&
- COMET_SPARK_TO_COLUMNAR_ENABLED.get(conf) && {
+ if (CometSparkToColumnarExec.isSchemaSupported(op.schema)) {
+ op match {
+ // Convert Spark DS v1 scan to Arrow format
+ case scan: FileSourceScanExec =>
+ scan.relation.fileFormat match {
+ case _: JsonFileFormat =>
CometConf.COMET_CONVERT_FROM_JSON_ENABLED.get(conf)
+ case _: ParquetFileFormat =>
CometConf.COMET_CONVERT_FROM_PARQUET_ENABLED.get(conf)
+ case _ => isSparkToArrowEnabled(conf, op)
+ }
+ // Convert Spark DS v2 scan to Arrow format
+ case scan: BatchScanExec =>
+ scan.scan match {
+ case _: JsonScan =>
CometConf.COMET_CONVERT_FROM_JSON_ENABLED.get(conf)
+ case _: ParquetScan =>
CometConf.COMET_CONVERT_FROM_PARQUET_ENABLED.get(conf)
+ case _ => isSparkToArrowEnabled(conf, op)
+ }
+ // other leaf nodes
+ case _: LeafExecNode =>
+ isSparkToArrowEnabled(conf, op)
+ case _ =>
+ // TODO: consider converting other intermediate operators to
columnar.
+ false
+ }
+ } else {
+ false
+ }
+ }
+
+ private def isSparkToArrowEnabled(conf: SQLConf, op: SparkPlan) = {
+ COMET_SPARK_TO_ARROW_ENABLED.get(conf) && {
val simpleClassName = Utils.getSimpleName(op.getClass)
val nodeName = simpleClassName.replaceAll("Exec$", "")
-
COMET_SPARK_TO_COLUMNAR_SUPPORTED_OPERATOR_LIST.get(conf).contains(nodeName)
+ COMET_SPARK_TO_ARROW_SUPPORTED_OPERATOR_LIST.get(conf).contains(nodeName)
}
}
diff --git a/spark/src/test/resources/test-data/json-test-1.ndjson
b/spark/src/test/resources/test-data/json-test-1.ndjson
new file mode 100644
index 00000000..324b3060
--- /dev/null
+++ b/spark/src/test/resources/test-data/json-test-1.ndjson
@@ -0,0 +1,4 @@
+{ "a": [1], "b": { "c": "foo" }}
+{ "a": 2, "b": { "d": "bar" }}
+{ "b": { "d": "bar" }}
+{ "a": 3 }
diff --git a/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala
b/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala
index b9c5c3ca..d27c1791 100644
--- a/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala
+++ b/spark/src/test/scala/org/apache/comet/CometExpressionSuite.scala
@@ -1974,27 +1974,30 @@ class CometExpressionSuite extends CometTestBase with
AdaptiveSparkPlanHelper {
}
test("get_struct_field") {
- withSQLConf(
- CometConf.COMET_SPARK_TO_COLUMNAR_ENABLED.key -> "true",
- CometConf.COMET_SPARK_TO_COLUMNAR_SUPPORTED_OPERATOR_LIST.key ->
"FileSourceScan") {
- withTempPath { dir =>
- var df = spark
- .range(5)
- // Add both a null struct and null inner value
- .select(
- when(
- col("id") > 1,
- struct(
- when(col("id") > 2, col("id")).alias("id"),
- when(col("id") > 2, struct(when(col("id") > 3,
col("id")).alias("id")))
- .as("nested2")))
- .alias("nested1"))
-
- df.write.parquet(dir.toString())
-
- df = spark.read.parquet(dir.toString())
- checkSparkAnswerAndOperator(df.select("nested1.id"))
- checkSparkAnswerAndOperator(df.select("nested1.nested2.id"))
+ Seq("", "parquet").foreach { v1List =>
+ withSQLConf(
+ SQLConf.USE_V1_SOURCE_LIST.key -> v1List,
+ CometConf.COMET_NATIVE_SCAN_ENABLED.key -> "false",
+ CometConf.COMET_CONVERT_FROM_PARQUET_ENABLED.key -> "true") {
+ withTempPath { dir =>
+ var df = spark
+ .range(5)
+ // Add both a null struct and null inner value
+ .select(
+ when(
+ col("id") > 1,
+ struct(
+ when(col("id") > 2, col("id")).alias("id"),
+ when(col("id") > 2, struct(when(col("id") > 3,
col("id")).alias("id")))
+ .as("nested2")))
+ .alias("nested1"))
+
+ df.write.parquet(dir.toString())
+
+ df = spark.read.parquet(dir.toString())
+ checkSparkAnswerAndOperator(df.select("nested1.id"))
+ checkSparkAnswerAndOperator(df.select("nested1.nested2.id"))
+ }
}
}
}
diff --git
a/spark/src/test/scala/org/apache/comet/exec/CometColumnarShuffleSuite.scala
b/spark/src/test/scala/org/apache/comet/exec/CometColumnarShuffleSuite.scala
index 78b4bbb9..a2f07155 100644
--- a/spark/src/test/scala/org/apache/comet/exec/CometColumnarShuffleSuite.scala
+++ b/spark/src/test/scala/org/apache/comet/exec/CometColumnarShuffleSuite.scala
@@ -831,7 +831,7 @@ abstract class CometColumnarShuffleSuite extends
CometTestBase with AdaptiveSpar
withSQLConf(
SQLConf.USE_V1_SOURCE_LIST.key -> "", // Use DataSourceV2
SQLConf.ADAPTIVE_EXECUTION_ENABLED.key -> "false", // Disable AQE
- CometConf.COMET_SCAN_ENABLED.key -> "false") { // Disable CometScan to
use Spark BatchScan
+ CometConf.COMET_NATIVE_SCAN_ENABLED.key -> "false") { // Disable
CometScan to use Spark BatchScan
withParquetTable((0 until 5).map(i => (i, (i + 1).toLong)), "tbl") {
val df = sql("SELECT * FROM tbl")
val shuffled = df
diff --git a/spark/src/test/scala/org/apache/comet/exec/CometExecSuite.scala
b/spark/src/test/scala/org/apache/comet/exec/CometExecSuite.scala
index 5ca9401c..15864a33 100644
--- a/spark/src/test/scala/org/apache/comet/exec/CometExecSuite.scala
+++ b/spark/src/test/scala/org/apache/comet/exec/CometExecSuite.scala
@@ -1606,6 +1606,20 @@ class CometExecSuite extends CometTestBase {
}
})
}
+
+ test("read JSON file") {
+ Seq("", "json").foreach { v1List =>
+ withSQLConf(
+ SQLConf.USE_V1_SOURCE_LIST.key -> v1List,
+ CometConf.COMET_EXPLAIN_FALLBACK_ENABLED.key -> "true",
+ CometConf.COMET_CONVERT_FROM_JSON_ENABLED.key -> "true") {
+ spark.read
+ .json("src/test/resources/test-data/json-test-1.ndjson")
+ .createOrReplaceTempView("tbl")
+ checkSparkAnswerAndOperator("SELECT a, b.c, b.d FROM tbl")
+ }
+ }
+ }
}
case class BucketedTableTestSpec(
diff --git a/spark/src/test/scala/org/apache/spark/sql/CometTestBase.scala
b/spark/src/test/scala/org/apache/spark/sql/CometTestBase.scala
index fd0328c8..a88f9f45 100644
--- a/spark/src/test/scala/org/apache/spark/sql/CometTestBase.scala
+++ b/spark/src/test/scala/org/apache/spark/sql/CometTestBase.scala
@@ -79,7 +79,7 @@ abstract class CometTestBase
conf.set(CometConf.COMET_ENABLED.key, "true")
conf.set(CometConf.COMET_EXEC_ENABLED.key, "true")
conf.set(CometConf.COMET_EXEC_ALL_OPERATOR_ENABLED.key, "true")
- conf.set(CometConf.COMET_SPARK_TO_COLUMNAR_ENABLED.key, "true")
+ conf.set(CometConf.COMET_SPARK_TO_ARROW_ENABLED.key, "true")
conf.set(CometConf.COMET_MEMORY_OVERHEAD.key, "2g")
conf
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]