ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ARROW-6000: [Python] Add support for LargeString and LargeBinary types - #4927

Closed
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary
Closed

ARROW-6000: [Python] Add support for LargeString and LargeBinary types #4927
pitrou wants to merge 2 commits into
apache:masterfrom
pitrou:ARROW-6000-py-large-binary

Conversation

@pitrou

@pitroupitrou commented Jul 23, 2019

Copy link
Copy Markdown
Member

Also fix a bug in Take / Filter for large binary types.

@kszucs

Copy link
Copy Markdown
Member

@ursabot build

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch 2 times, most recently from 3bdd5c9 to 63b4dfaCompareJuly 29, 2019 15:44
@codecov-io

Copy link
Copy Markdown

Codecov Report

Merging #4927 into master will increase coverage by 0.43%.
The diff coverage is 93.43%.

Impacted file tree graph

@@ Coverage Diff @@## master #4927 +/- ##
==========================================
+ Coverage 87.5% 87.93% +0.43% 
==========================================
Files 998 908 -90 Lines 141869 133088 -8781 Branches 1418 1418 ==========================================
- Hits 124139 117036 -7103 + Misses 17368 16042 -1326 + Partials 362 10 -352
Impacted FilesCoverage Δ
cpp/src/arrow/testing/random.h100% <ø> (ø)⬆️
cpp/src/arrow/pretty_print.cc83.33% <ø> (ø)⬆️
cpp/src/arrow/python/helpers.h88.88% <ø> (ø)⬆️
cpp/src/arrow/visitor.h50% <ø> (ø)⬆️
cpp/src/arrow/visitor.cc0% <0%> (ø)⬆️
cpp/src/arrow/python/helpers.cc77.05% <0%> (-0.92%)⬇️
cpp/src/arrow/json/converter-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/visitor_inline.h88.78% <100%> (ø)⬆️
cpp/src/arrow/array-binary-test.cc100% <100%> (ø)⬆️
cpp/src/arrow/pretty_print-test.cc100% <100%> (ø)⬆️
... and 124 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 171c3f7...63b4dfa. Read the comment docs.

@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 63b4dfa to 022173eCompareJuly 30, 2019 08:12
@pitroupitrou changed the title [WIP] ARROW-6000: [Python] Add support for LargeString and LargeBinary types ARROW-6000: [Python] Add support for LargeString and LargeBinary types Jul 30, 2019
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from 022173e to aaf009eCompareJuly 30, 2019 08:14
@pitrou
pitrouforce-pushed the ARROW-6000-py-large-binary branch from aaf009e to 9672ca4CompareJuly 30, 2019 08:44
@pitrou

Copy link
Copy Markdown
MemberAuthor

@pitrou

Copy link
Copy Markdown
MemberAuthor

@jorisvandenbossche Want to take a look?

@jorisvandenbossche

Copy link
Copy Markdown
Member

Yes, was planning to do that, thanks for the ping!

I played a bit with the branch (mainly with large_string), some things I noticed (to be clear: I suppose most of them are expected to not yet working, so not wanting to say they should be fixed in this PR, but some items might be worth JIRA issues):

  • With dictionary_encode() is not working on the array (a = pa.array(['a', 'b', 'c'], pa.large_string()); a.dictionary_encode() gives NotImplementedError), but constructing a dictionary array manually with large string dictionary works OK. unique is also not implemented.

  • to_pandas is not yet working (both on Table or Array). to_pylist is working fine. Also not yet for parquet, but I don't know for sure that parquet has a type that could be used for this (so not sure it should be working).

  • Do we want to be able to cast string to large_string (or the other way around) ?

  • take is not working correctly (but also not raising that it is not supported), while it works correctly for normal string:

    In [29]: a = pa.array(['a', 'b', 'c'], pa.large_string()) In [30]: a.take(pa.array([0, 2])) Out[30]: <pyarrow.lib.LargeStringArray object at 0x7f19719d40f8>
    [
    "",
    ""
    ]
    In [31]: b = pa.array(['a', 'b', 'c'], pa.string())
    In [32]: b.take(pa.array([0, 2]))
    Out[32]: <pyarrow.lib.StringArray object at 0x7f19719cd2b0>
    [
    "a",
    "c"
    ]
    

Will take a look at the actual code now.

@pitrou

pitrou commented Jul 31, 2019

Copy link
Copy Markdown
MemberAuthor

Ok, some answers:

  • dictionary encoding isn't implemented, that's expected.
  • to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?
  • casting from string to large_string and vice-versa: yes, I opened https://issues.apache.org/jira/browse/ARROW-6071 for that and will leave it to interested contributors
  • take not working correctly: that's unexpected; either it should work or raise NotImplementedError...

@jorisvandenbossche

Copy link
Copy Markdown
Member

Ah, I see you already opened https://issues.apache.org/jira/browse/ARROW-6071 for the casting yesterday

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Yes, that's something I could look into.

@jorisvandenbosschejorisvandenbossche left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I already went through the python part (need to run now), which looks good.

Create large variable-length binary type

This data type may not be supported by all Arrow implementations. Unless
you need to represent data larger than 2GB, you should prefer binary().

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we clarify this is about the total size of a single array?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, forget, a single value bigger than 2GB of course implies an array that is bigger than 2GB .. ;), so the distinction does not matter much.

@pitrou

Copy link
Copy Markdown
MemberAuthor

Ok, I've pushed a fix for the take() issue. Thanks for noticing!

@pitrou

Copy link
Copy Markdown
MemberAuthor

Will merge soon if no more comments.

Comment threadcpp/src/arrow/type.h
public:
static constexpr Type::type type_id = Type::STRING;
static constexpr bool is_utf8 = true;
using EquivalentBinaryType = BinaryType;

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fsaintjacques Any issue with the naming?

@pitroupitrou closed this in eb73b96Aug 1, 2019
@pitrou
pitrou deleted the ARROW-6000-py-large-binary branch August 1, 2019 10:50
@jorisvandenbossche

Copy link
Copy Markdown
Member

to_pandas: similar. Perhaps that's something you would like to tackle in a separate issue?

Have to see a bit with my priorities, but at least created an issue for it: https://issues.apache.org/jira/browse/ARROW-6115

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@pitrou@kszucs@codecov-io@jorisvandenbossche