av9ash/GitBugs huggingface dataset:
Bug: Support calling stored procedure on JDBC data source
Status: Open | Priority: Major | Resolution: 
Created: 17/Jun/20 08:00
Affects Version/s: 3.0.0

Currently, all queries via JDBC data source are enveloped by outer SELECT as described below:

[https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html]
{quote}
A query that will be used to read data into Spark. The specified query will be parenthesized and used as a subquery in the FROM clause. Spark will also assign an alias to the subquery clause. As an example, spark will issue a query of the following form to the JDBC Source.

SELECT <columns> FROM (<user_specified_query>) spark_gen_alias
{quote}

Because of the behavior, we cannot call a stored procedure in major databases, because stored procedure call syntax is usually not allowed to be used in a subquery because its returned value is optional.

For example, below Scala code to execute a query on Snowflake as JDBC data source raises a syntax error, because the query "call proc()" is rewritten to "select * from (call proc()) where 1 = 0", and it is invalid because CALL cannot be in the middle of a query.

{code:scala}
val df: DataFrame = spark.read
  .format("snowflake")
  .options(options)
  .option("query", "call proc()")
  .load()

display(df)
{code}

I tested this with Snowflake, but it should happen in any major database systems.

I understand JDBC data source is to read and write data through Dataframe, then the interfaces implemented are just to read and write, but sometimes we need to just execute some queries before or after reading/writing, for example, to preprocess the data by stored procedure.

I would appreciate it if you could consider to implement some interface/way to allow us to call a stored procedure.
Bug: PySpark: error in serializing ML pipelines with training strategy and pipeline as estimator
Status: Resolved | Priority: Major | Resolution: Cannot Reproduce
Created: 22/Jun/20 09:17
Affects Version/s: 2.4.5

Hi all,

I get the following error when serializing a pipeline with a CrossValidation and/or TrainValidationSplit training strategy and an estimator of type Pipeline through pyspark:
{code:java}
AttributeError: 'Pipeline' object has no attribute '_transfer_param_map_to_java
{code}
In scala the serialization works without problems, so i assume the issue should be in pyspark

In case of using the LinearRegression as estimator the serialization is working properly.

I see that in the tests of CrossValidation and TrainValidatioSplit, there is not a test with Pipeline as an estimator.

I do not know if there is a workaround for this or another way to serialize the pipeline, or if this is a known issue

Code for replicating the issue:
{code:java}
from pyspark.ml import Pipeline
from pyspark.ml.classification import LogisticRegression, DecisionTreeClassifier
from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.feature import HashingTF, Tokenizer
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder, TrainValidationSplit
# Prepare training documents from a list of (id, text, label) tuples.
df = spark.createDataFrame([
    (0, "a b c d e spark", 1.0),
    (1, "b d", 0.0),
    (2, "spark f g h", 1.0),
    (3, "hadoop mapreduce", 3.0)
], ["id", "text", "label"])
# Configure an ML pipeline, which consists of three stages: tokenizer, hashingTF, and lr.
lr = LogisticRegression(maxIter=10, regParam=0.001)
tokenizer = Tokenizer(inputCol="text", outputCol="words")
hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol="features", numFeatures=1000)
#treeClassifier = DecisionTreeClassifier()
sub_pipeline = Pipeline(stages=[tokenizer, hashingTF, lr])
sub_pipeline2 = Pipeline(stages=[tokenizer, hashingTF])
paramGrid = ParamGridBuilder() \
    .addGrid(lr.regParam, [0.1, 0.01]) \
    .build()
pipeline_cv = CrossValidator(estimator=lr,
                          estimatorParamMaps=paramGrid,
                          evaluator=BinaryClassificationEvaluator(),
                          numFolds=2)
cvPath = "/tmp/cv"
pipeline_cv.write().overwrite().save(cvPath)
model = pipeline_cv.fit(sub_pipeline2.fit(df).transform(df))
model.write().overwrite().save(cvPath)
pipeline_cv2 = CrossValidator(estimator=sub_pipeline,
                          estimatorParamMaps=paramGrid,
                          evaluator=BinaryClassificationEvaluator(),
                          numFolds=2)
cvPath = "/tmp/cv2"
model2 = pipeline_cv2.fit(df).bestModel
model2.write().overwrite().save(cvPath)
pipeline_cv2.write().overwrite().save(cvPath)
{code}
Bug: SparkExecuteStatementOperation does not set CANCELED state correctly 
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 22/Jun/20 21:00
Affects Version/s: 3.0.0

https://github.com/apache/spark/pull/28671 introduced changes that changed the way cleanup is done in SparkExecuteStatementOperation. In cancel(), cleanup (killing jobs) used to be done after setting state to CANCELED. Now, the order is reversed. Jobs are killed first, causing exception to be thrown inside execute(), so the status of the operation becomes ERROR before being set to CANCELED.

cc [~juliuszsompolski]
Bug: PySpark <> Beam pickling issues for collections.namedtuple
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 24/Jun/20 01:30
Affects Version/s: 3.3.0

PySpark monkeypatching namedtuple makes it difficult/impossible to depickle collections.namedtuple instances from outside of a pyspark environment.

 

When PySpark has been loaded into the environment, any time that you try to pickle a namedtuple, you are only able to unpickle it from an environment where the [hijack|https://github.com/apache/spark/blob/master/python/pyspark/serializers.py#L385] has been applied. 

This conflicts directly when trying to use Beam from a non-Spark environment (namingly Flink or Dataflow) making it impossible to use the pipeline if it has a namedtuple loaded somewhere. 

 
{code:python}
import collections
import dill
ColumnInfo = collections.namedtuple(
    "ColumnInfo",
    [
        "name",  # type: ColumnName  # pytype: disable=ignored-type-comment
        "type",  # type: Optional[ColumnType]  # pytype: disable=ignored-type-comment
    ])
dill.dumps(ColumnInfo('test', int))
{code}

{{b'\x80\x03cdill._dill\n_create_namedtuple\nq\x00X\n\x00\x00\x00ColumnInfoq\x01X\x04\x00\x00\x00nameq\x02X\x04\x00\x00\x00typeq\x03\x86q\x04X\x08\x00\x00\x00__main__q\x05\x87q\x06Rq\x07X\x04\x00\x00\x00testq\x08cdill._dill\n_load_type\nq\tX\x03\x00\x00\x00intq\n\x85q\x0bRq\x0c\x86q\r\x81q\x0e.'}}
{code:python}
import pyspark
import collections
import dill
ColumnInfo = collections.namedtuple(
    "ColumnInfo",
    [
        "name",  # type: ColumnName  # pytype: disable=ignored-type-comment
        "type",  # type: Optional[ColumnType]  # pytype: disable=ignored-type-comment
    ])
dill.dumps(ColumnInfo('test', int))
{code}
{{b'\x80\x03cpyspark.serializers\n_restore\nq\x00X\n\x00\x00\x00ColumnInfoq\x01X\x04\x00\x00\x00nameq\x02X\x04\x00\x00\x00typeq\x03\x86q\x04X\x04\x00\x00\x00testq\x05cdill._dill\n_load_type\nq\x06X\x03\x00\x00\x00intq\x07\x85q\x08Rq\t\x86q\n\x87q\x0bRq\x0c.'}}


Second pickled object can only be used from an environment with PySpark.
Bug: Replace dictionary-based function definitions to proper functions in functions.py
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 24/Jun/20 08:38
Affects Version/s: 3.1.0

Currently some functions in {{functions.py}} are defined by a dictionary. It programmatically defines the functions to the module; however, it makes some IDEs such as PyCharm don't detect.

Also, it makes hard to add proper examples into the docstrings.
Bug: write.partitionBy() creates duplicate subdirectories when user provides duplicate columns
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 11/Jun/20 11:59
Affects Version/s: 2.0.2

I recently remarked that if there are duplicated elements in the argument of write.partitionBy(), then the same partition subdirectory will be created multiple times.

For example: 
{code:java}
import spark.implicits._

val df: DataFrame = Seq(
  (1, "p1", "c1", 1L),
  (2, "p2", "c2", 2L),
  (2, "p1", "c2", 2L),
  (3, "p3", "c3", 3L),
  (3, "p2", "c3", 3L),
  (3, "p3", "c3", 3L)
).toDF("col1", "col2", "col3", "col4")

df.write
  .partitionBy("col1", "col1")  // we have "col1" twice
  .mode(SaveMode.Overwrite)
  .csv("output_dir"){code}
The above code will produce an output directory with this structure:

 
{code:java}
output_dir
  |
  |--col1=1
  |    |--col1=1
  |
  |--col1=2
  |    |--col1=2
  |
  |--col1=3
       |--col1=3{code}
And we won't be able to read the output

 
{code:java}
spark.read.csv("output_dir").show()
// Exception in thread "main" org.apache.spark.sql.AnalysisException: Found duplicate column(s) in the partition schema: `col1`;{code}
 

I am not sure if partitioning a dataframe twice by the same column make sense in some real-world applications, but it will cause schema inference problems in tools like AWS Glue crawler.

Should Spark handle the deduplication of the partition columns? Or maybe throw an exception when duplicated columns are detected?

If this behaviour is unexpected, I will work on a fix.
Bug: Thread leaks in pinned thread mode
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 17/Jun/20 01:19
Affects Version/s: 3.1.0

SPARK-22340 introduced a pin thread mode which guarantees you to sync Python thread and JVM thread.

However, looks like the JVM threads are not finished even when the Python thread is finished. It can be debugged via YourKit, and run multiple jobs with multiple threads at the same time.

Easiest reproducer is:

{code}
PYSPARK_PIN_THREAD=true ./bin/pyspark
{code}

{code}
>>> from threading import Thread
>>> Thread(target=lambda: spark.range(1000).collect()).start()
>>> Thread(target=lambda: spark.range(1000).collect()).start()
>>> Thread(target=lambda: spark.range(1000).collect()).start()
>>> spark._jvm._gateway_client.deque
deque([<py4j.clientserver.ClientServerConnection object at 0x119f7aba8>, <py4j.clientserver.ClientServerConnection object at 0x119fc9b70>, <py4j.clientserver.ClientServerConnection object at 0x119fc9e10>, <py4j.clientserver.ClientServerConnection object at 0x11a015358>, <py4j.clientserver.ClientServerConnection object at 0x119fc00f0>])
>>> Thread(target=lambda: spark.range(1000).collect()).start()
>>> spark._jvm._gateway_client.deque
deque([<py4j.clientserver.ClientServerConnection object at 0x119f7aba8>, <py4j.clientserver.ClientServerConnection object at 0x119fc9b70>, <py4j.clientserver.ClientServerConnection object at 0x119fc9e10>, <py4j.clientserver.ClientServerConnection object at 0x11a015358>, <py4j.clientserver.ClientServerConnection object at 0x119fc08d0>, <py4j.clientserver.ClientServerConnection object at 0x119fc00f0>])
{code}

The connection doesn't get closed, and it holds JVM thread running.
Bug: Make Pyspark Hadoop 3.2+ Variant available in PyPI
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 17/Jun/20 21:35
Affects Version/s: 3.0.0

The version of Pyspark 3.0.0 currently available in PyPI currently uses hadoop 2.7.4.

Could a variant (or the default) have its version of Hadoop aligned to 3.2.0 as per the downloadable spark binaries.

This would enable the PyPI version to be compatible with session token authorisations and assist in accessing data residing in object stores with stronger encryption methods.

If not PyPI then as a tar file in the apache download archives at the least please.
Bug: Pandas_udf does not properly return ArrayType
Status: Resolved | Priority: Major | Resolution: Cannot Reproduce
Created: 08/Jun/20 15:07
Affects Version/s: 2.4.3

Attempting to return an ArrayType() from pandas_udf reveals a consistent error with skipping specific list elements upon return. 

We were able to create a reproducible example, as below. 
{code:java}
df = spark.createDataFrame([('A', 1), ('A', 2), ('B', 5), ('B', 6), ('C', 10)], ['group', 'val'])

@pandas_udf(ArrayType(ArrayType(LongType())), PandasUDFType.GROUPED_AGG)
def get_list(x):
    return [[1,1], [2,2], [3,3], [4,4], [5,5], [6,6], [7,7], [8,8]]

df.groupby('group').agg(get_list(df['val']).alias('list_col')).show(3, False) {code}
{code:java}
+-----+-----------------------------+
|group|list_col                     |
+-----+-----------------------------+
|B    |[[1, 1],,,,,, [7, 7], [8, 8]]|
|C    |[[1, 1],,,,,, [7, 7], [8, 8]]|
|A    |[[1, 1],,,,,, [7, 7], [8, 8]]|
+-----+-----------------------------+
{code}
 

 

In every example we've come up with, it consistently replaces elements 2-6 with None (as well as some later elements too).
Bug: Date casting to string is giving wrong value
Status: Resolved | Priority: Major | Resolution: Cannot Reproduce
Created: 01/Jun/20 12:09
Affects Version/s: 2.4.5

The code converts the string to date and then write it in csv.
{code:java}
val x = Seq(("2020-02-19", "2020-02-19 05:11:00")).toDF("a", "b").select('a.cast("date"), 'b.cast("timestamp"))

x.show()

+----------+-------------------+
|         a|                  b|
+----------+-------------------+
|2020-02-19|2020-02-19 05:11:00|
+----------+-------------------+

x.write.mode("overwrite").option("header", true).csv("/tmp/test1.csv")
{code}
 

The date written in CSV file is different:
{code:java}
> snakebite cat "/tmp/test1.csv/*.csv"
a,b
2020-02-18,2020-02-19T05:11:00.000Z{code}
Bug: SPARK-31500 introduces breaking changes in 2.4.6
Status: Resolved | Priority: Major | Resolution: Won't Fix
Created: 09/Jun/20 16:04
Affects Version/s: 2.4.6

[31500|[https://github.com/apache/spark/pull/28351/files]] introduced unimplemented fields of the `Collect` class that cause client extensions of that class to fail unless the spark version is pinned to `2.4.5`. Since this was a minor version bump, seems like this wasn't desired.

I believe we should be able to at least put default values:

`convertToBufferElement(value: Any): Any = InternalRow.copyValue(value)`

`bufferElementType: DataType = child.dataType`

and restore the `override def eval` in `Collect`, to support compatibility with 2.4.5 while allowing implementers in that file to override them to fix the bug. Since the abstract `Collect` is currently not designed to fix the bug (just provide tools that can be implemented to fix it), this change wouldn't undermine the bug fix, just add backwards compatibility to 2.4.5.
Bug: Solve string value error about Date/Timestamp in ScriptTransform
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 10/Jun/20 02:45
Affects Version/s: 3.1.0

For test case

 
{code:java}
 test("SPARK-25990: TRANSFORM should handle different data types correctly") {
    assume(TestUtils.testCommandAvailable("python"))
    val scriptFilePath = getTestResourcePath("test_script.py")    withTempView("v") {
      val df = Seq(
        (1, "1", 1.0, BigDecimal(1.0), new Timestamp(1), Date.valueOf("2015-05-21")),
        (2, "2", 2.0, BigDecimal(2.0), new Timestamp(2), Date.valueOf("2015-05-22")),
        (3, "3", 3.0, BigDecimal(3.0), new Timestamp(3), Date.valueOf("2015-05-23"))
      ).toDF("a", "b", "c", "d", "e", "f") // Note column d's data type is Decimal(38, 18)
      df.createTempView("v")      val query = sql(
        s"""
           |SELECT
           |TRANSFORM(a, b, c, d, e, f)
           |USING 'python $scriptFilePath' AS (a, b, c, d, e, f)
           |FROM v
        """.stripMargin)      val decimalToString: Column => Column = c => c.cast("string")      checkAnswer(query, identity, df.select(
        'a.cast("string"),
        'b.cast("string"),
        'c.cast("string"),
        decimalToString('d),
        'e.cast("string"),
        'f.cast("string")).collect())
    }
  }

{code}
 

 

Get wrong result
{code:java}
[info] - SPARK-25990: TRANSFORM should handle different data types correctly *** FAILED *** (4 seconds, 997 milliseconds)
[info]   Results do not match for Spark plan:
[info]    ScriptTransformation [a#19, b#20, c#21, d#22, e#23, f#24], python /Users/angerszhu/Documents/project/AngersZhu/spark/sql/core/target/scala-2.12/test-classes/test_script.py, [a#31, b#32, c#33, d#34, e#35, f#36], org.apache.spark.sql.execution.script.ScriptTransformIOSchema@1ad5a29c
[info]   +- Project [_1#6 AS a#19, _2#7 AS b#20, _3#8 AS c#21, _4#9 AS d#22, _5#10 AS e#23, _6#11 AS f#24]
[info]      +- LocalTableScan [_1#6, _2#7, _3#8, _4#9, _5#10, _6#11]
[info]
[info]
[info]    == Results ==
[info]    !== Expected Answer - 3 ==                                           == Actual Answer - 3 ==
[info]   ![1,1,1.0,1.000000000000000000,1970-01-01 08:00:00.001,2015-05-21]   [1,1,1.0,1.000000000000000000,1000,16576]
[info]   ![2,2,2.0,2.000000000000000000,1970-01-01 08:00:00.002,2015-05-22]   [2,2,2.0,2.000000000000000000,2000,16577]
[info]   ![3,3,3.0,3.000000000000000000,1970-01-01 08:00:00.003,2015-05-23]   [3,3,3.0,3.000000000000000000,3000,16578] (SparkPlanTest.scala:95)
[
{code}
Bug: Beeline discard the last line of the sql file when submited to  thriftserver via beeline
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 10/Jun/20 13:48
Affects Version/s: 2.3.4

I submitted a sql file on beeline and the result returned is wrong. After many tests, it was found that the sql executed by Spark would discard the last line.This should be beeline's bug parsing sql file.
Bug: Adjacent value parsing not supported for Localized Patterns because of JDK bug
Status: Resolved | Priority: Major | Resolution: Not A Problem
Created: 01/Jun/20 02:55
Affects Version/s: 3.0.0


{code:java}
spark-sql> set spark.sql.legacy.timeParserPolicy=exception;
spark.sql.legacy.timeParserPolicy	exception
spark-sql> select to_timestamp('202011', 'YYYYww');
{code}

{code:java}
Caused by: java.time.format.DateTimeParseException: Text '202011' could not be parsed at index 0
	at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
	at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777)
	at org.apache.spark.sql.catalyst.util.Iso8601TimestampFormatter.$anonfun$parse$1(TimestampFormatter.scala:79)
	... 99 more
{code}


{code:java}
spark-sql> set spark.sql.legacy.timeParserPolicy=legacy;
spark.sql.legacy.timeParserPolicy	legacy
spark-sql> select to_timestamp('202011', 'YYYYwu');
2019-12-30 00:00:00
spark-sql> select to_timestamp('202011', 'YYYYww');
2020-03-08 00:00:00
{code}


The result could vary between different JDKs
Bug: Add provider disable possibility just like in delegation token provider
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 22/Jun/20 08:43
Affects Version/s: 3.1.0

There is an enable flag in delegation provider area "spark.security.credentials.%s.enabled".
It would be good to add similar to the JDBC secure connection provider area because this would make embedded providers interchangeable (embedded can be turned off and another provider w/ a different name can be registered). This make sense only if we create API for the secure JDBC connection provider.
Bug: Make more cache enable for Python UDFs.
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 10/Jun/20 01:40
Affects Version/s: 3.0.0

Currently the cache manager doesn't use the cache for {{udf}} if the {{udf}} is created again even if the functions is the same.
{code:python}
>>> func = lambda x: x

>>> df = spark.range(1)
>>> df.select(udf(func)("id")).cache()

>>> df.select(udf(func)("id")).explain()
== Physical Plan ==
*(2) Project [pythonUDF0#14 AS <lambda>(id)#12]
+- BatchEvalPython [<lambda>(id#0L)], [pythonUDF0#14]
 +- *(1) Range (0, 1, step=1, splits=12)
{code}
Bug: CSV schema inference with boolean & integer 
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 18/Jun/20 19:54
Affects Version/s: 2.4.6

I have a dataset consisting of two small files in CSV format. 
{code:bash}
$ cat /example/f0.csv
col1
8589934592

$ cat /example/f1.csv
col1
43200000
true
{code}
 

When I try and load this in (py)spark and infer schema, my expectation is that the column is inferred to be a string. However, it is inferred as a boolean:
{code:python}
spark.read.csv(path="file:///example/*.csv", header=True, inferSchema=True, multiLine=True).show()
+----+
|col1|
+----+
|null|
|true|
|null|
+----+
{code}
Note that this seems to work correctly if multiLine is set to False (although we need to set it to True as this column may indeed span multiple lines in general).
Bug: test of pyspark.sql.functions.timestamp_seconds failed if non-american timezone setting
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 24/Jun/20 09:38
Affects Version/s: 3.1.0

The python test failed for aarch64 job, see https://amplab.cs.berkeley.edu/jenkins/job/spark-master-test-python-arm/405/console since the commit https://github.com/apache/spark/commit/f0e6d0ec13d9cdadf341d1b976623345bcdb1028#diff-c8de34467c555857b92875bf78bf9d49 merged:
**********************************************************************
File "/home/jenkins/workspace/spark-master-test-python-arm/python/pyspark/sql/functions.py", line 1435, in pyspark.sql.functions.timestamp_seconds
Failed example:
    time_df.select(timestamp_seconds(time_df.unix_time).alias('ts')).collect()
Expected:
    [Row(ts=datetime.datetime(2008, 12, 25, 7, 30))]
Got:
    [Row(ts=datetime.datetime(2008, 12, 25, 23, 30))]
**********************************************************************
   1 of   3 in pyspark.sql.functions.timestamp_seconds
***Test Failed*** 1 failures.

But this is not arm64-related issue, I took test on x86 instance with timezone setting of UTC, then the test failed too, so I think the expected datetime is timezone American/**, but seems we have not set the timezone when doing these timezone sensitive python tests.
Bug: Patch cloudpickle.py with typing module side-effect fix
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 24/Jun/20 19:19
Affects Version/s: 2.4.6

Pyspark's cloudpickle.py and versions of cloudpickle below 1.3.0 interfere with dill unpickling because they define types.ClassType, which is undefined in dill. This results in the following error:
{code:java}
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/apache_beam/internal/pickler.py", line 279, in loads
    return dill.loads(s)
  File "/usr/local/lib/python3.6/site-packages/dill/_dill.py", line 317, in loads
    return load(file, ignore)
  File "/usr/local/lib/python3.6/site-packages/dill/_dill.py", line 305, in load
    obj = pik.load()
  File "/usr/local/lib/python3.6/site-packages/dill/_dill.py", line 577, in _load_type
    return _reverse_typemap[name]
KeyError: 'ClassType'{code}
(See [https://github.com/cloudpipe/cloudpickle/issues/82])

This was fixed for cloudpickle 1.3.0+ ([https://github.com/cloudpipe/cloudpickle/pull/337]), but PySpark's cloudpickle.py doesn't have this change yet.
Bug: Support processing array/map/struct type using spark noserde mode
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 09/Jun/20 01:52
Affects Version/s: 3.0.0

Currently, It is not supported to use script(e.g. python) to process array type or map type, it will complain with below message:
 {{org.apache.spark.sql.catalyst.expressions.UnsafeArrayData cannot be cast to [Ljava.lang.Object}}
 {{org.apache.spark.sql.catalyst.expressions.UnsafeMapData cannot be cast to java.util.Map}}

To support it

 

https://github.com/apache/spark/pull/29085/commits/43d0f24f2c769dc270cf7e5fa2c5c13c32d0a631?file-filters%5B%5D=.scala
Bug: Change package references for ArrowBuf
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 16/Jun/20 06:26
Affects Version/s: 3.0.0

Recently, we have moved class ArrowBuf from package io.netty.buffer to org.apache.arrow.memory. So after upgrading Arrow library, we need to update the references to ArrowBuf with the correct package name.