Uh oh!
There was an error while loading. Please reload this page.
[SPARK-6055] [PySpark] fix incorrect __eq__ of DataType - #4808
Conversation
davies
commented
Feb 27, 2015
This PR works for 1.3+, will create another PR for 1.2 and 1.1 |
SparkQA
commented
Feb 27, 2015
Test build #28053 has started for PR 4808 at commit
|
There was a problem hiding this comment.
These are duplicated, also in types.py.
SparkQA
commented
Feb 27, 2015
Test build #28053 has finished for PR 4808 at commit
|
AmplabJenkins
commented
Feb 27, 2015
Test FAILed. |
SparkQA
commented
Feb 27, 2015
Test build #28072 has started for PR 4808 at commit
|
SparkQA
commented
Feb 27, 2015
Test build #28072 has finished for PR 4808 at commit
|
AmplabJenkins
commented
Feb 27, 2015
Test PASSed. |
SparkQA
commented
Feb 27, 2015
Test build #28079 has started for PR 4808 at commit
|
SparkQA
commented
Feb 27, 2015
Test build #28079 has finished for PR 4808 at commit
|
AmplabJenkins
commented
Feb 27, 2015
Test FAILed. |
SparkQA
commented
Feb 27, 2015
Test build #28084 has started for PR 4808 at commit
|
SparkQA
commented
Feb 27, 2015
Test build #28084 has finished for PR 4808 at commit
|
AmplabJenkins
commented
Feb 27, 2015
Test FAILed. |
There was a problem hiding this comment.
Is this a breaking API change? Or were the old doctests showing incorrect usage of the API?
JoshRosen
commented
Feb 27, 2015
It looks like |
davies
commented
Feb 27, 2015
@JoshRosen Because we serialized the objects in batch, and pickle memorize the multiple occurrences of same object in the batch, finally we will get single DataType object (even for StructType), we can benefits from this optimization, no |
SparkQA
commented
Feb 27, 2015
Test build #28094 has started for PR 4808 at commit
|
JoshRosen
commented
Feb 27, 2015
Makes sense; LGTM. I'll take a look at the backport patches, too. |
SparkQA
commented
Feb 27, 2015
Test build #28094 has finished for PR 4808 at commit
|
AmplabJenkins
commented
Feb 27, 2015
Test PASSed. |
The _eq_ of DataType is not correct, class cache is not use correctly (created class can not be find by dataType), then it will create lots of classes (saved in _cached_cls), never released. Also, all same DataType have same hash code, there will be many object in a dict with the same hash code, end with hash attach, it's very slow to access this dict (depends on the implementation of CPython). This PR also improve the performance of inferSchema (avoid the unnecessary converter of object). cc pwendell JoshRosen Author: Davies Liu <davies@databricks.com> Closes#4808 from davies/leak and squashes the following commits: 6a322a4 [Davies Liu] tests refactor 3da44fc [Davies Liu] fix __eq__ of Singleton 534ac90 [Davies Liu] add more checks 46999dc [Davies Liu] fix tests d9ae973 [Davies Liu] fix memory leak in sql (cherry picked from commit e0e64ba) Signed-off-by: Josh Rosen <joshrosen@databricks.com>
JoshRosen
commented
Feb 28, 2015
LGTM, so I've merged this into |
The eq of DataType is not correct, class cache is not use correctly (created class can not be find by dataType), then it will create lots of classes (saved in _cached_cls), never released.
Also, all same DataType have same hash code, there will be many object in a dict with the same hash code, end with hash attach, it's very slow to access this dict (depends on the implementation of CPython).
This PR also improve the performance of inferSchema (avoid the unnecessary converter of object).
cc @pwendell@JoshRosen