Skip to content

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rtpsw@westonpace@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
ARROW-17610: [C++] Support additional source types in SourceNode by rtpsw · Pull Request #14207 · apache/arrow · GitHub
Skip to content

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rtpsw@westonpace@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' ARROW-17610: [C++] Support additional source types in SourceNode by rtpsw · Pull Request #14207 · apache/arrow · GitHub
Skip to content

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rtpsw@westonpace@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' ARROW-17610: [C++] Support additional source types in SourceNode by rtpsw · Pull Request #14207 · apache/arrow · GitHub
Skip to content

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rtpsw@westonpace@ursabot
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' ARROW-17610: [C++] Support additional source types in SourceNode by rtpsw · Pull Request #14207 · apache/arrow · GitHub
Skip to content

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

ARROW-17610: [C++] Support additional source types in SourceNode - #14207

Merged
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610
Nov 21, 2022
Merged

ARROW-17610: [C++] Support additional source types in SourceNode#14207
westonpace merged 4 commits into
apache:masterfrom
rtpsw:ARROW-17610

Conversation

@rtpsw

Copy link
Copy Markdown
Contributor

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

cc @westonpace, @pitrou

@github-actions

Copy link
Copy Markdown

@westonpacewestonpace 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 still think there is value in the user being able to specify the I/O executor. I just think we should default it to the default I/O executor.

Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/plan_test.cc Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
Comment threadcpp/src/arrow/compute/exec/options.h Outdated
@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, any idea how to fix the Windows linker error here? In the past I was able to fix this by adding inline but this time it didn't work.

I suspect this is due to adding Executor, which is not a public symbol, in a constructor parameter as you requested. If so and we insist on exposing the IO executor, I see a couple of options to consider:

  1. Make Executor a public symbol. I'm not sure what issues that might lead to.
  2. Make Executor derive from a new type which would be a public symbol, and use this type in the constructor. This would lead to a not-so-pretty dynamic cast internally.
  3. Expose one or more different (public-symbol) parameters that are used to internally setup the IO executor. This restricts the kind of IO executors that the caller may set up.

@westonpace

Copy link
Copy Markdown
Member

Executor is exported and it is included in other places that are part of the public API (e.g. SourceNodeOptions, CSV reader).

I think the problem is that SchemaSourceNodeOptions is templated. Can you try adding something like (note, the first two lines already exist in your PR)...

using ArrayVectorIteratorMaker = std::function<Iterator<std::shared_ptr<ArrayVector>>()>;
using ArrayVectorSourceNodeOptions = SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
template class ARROW_EXPORT ArrayVectorSourceNodeOptions; // Explicitly export the specialization

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

It turns out template instantiations and attributes (in this case, visibility) do not work together nicely. When I try adding code like template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions, I get compiler errors like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: error: using typedef-name ‘using ArrayVectorSourceNodeOptions = class arrow::compute::SchemaSourceNodeOptions<std::function<arrow::Iterator<std::shared_ptr<std::vector<std::shared_ptr<arrow::Array> > > >()> >’ after ‘class’
113 | template<> class ARROW_EXPORT ArrayVectorSourceNodeOptions;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

and when I try adding code like template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>, I get compiler warnings like:

/mnt/user1/tscontract/github/rtpsw/arrow/cpp/src/arrow/compute/exec/options.h:113:31: warning: attributes ignored on template instantiation [-Wattributes]
113 | template<> class ARROW_EXPORT SchemaSourceNodeOptions<ArrayVectorIteratorMaker>;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

So, both tries do not work, at least with my compiler. There seems to be a proposal documenting this limitation, but I'm not sure what its status is.

In the commit I just made, I opted instead to explicitly define and export non-template symbols.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

The CI failures look unrelated to the PR.

@rtpsw

Copy link
Copy Markdown
ContributorAuthor

@westonpace, to make sure we're on the same page, what remains for this PR to go through?

@westonpacewestonpace 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.

This looks good now and should be very useful for helping people get data into Acero, thanks! I'll wait until after we make the RC branch (I think this happens on Monday) before I merge.

@rtpsw

rtpsw commented Nov 6, 2022

Copy link
Copy Markdown
ContributorAuthor

@westonpace, is it a good time to get back to this PR?

@westonpace

Copy link
Copy Markdown
Member

Yes, apologies. Since it's been a month lets give it one last CI pass. I've rebased this (all tests pass locally) and will merge later today.

@westonpace
westonpace merged commit c929303 into apache:masterNov 21, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = 7198676 and contender = c929303. c929303 is a master commit associated with this PR. Results will be available as each benchmark for each run completes.
Conbench compare runs links:
[Finished ⬇️0.0% ⬆️0.0%] ec2-t3-xlarge-us-east-2
[Finished ⬇️0.57% ⬆️0.0%] test-mac-arm
[Finished ⬇️0.0% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.38% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] c9293039 ec2-t3-xlarge-us-east-2
[Finished] c9293039 test-mac-arm
[Finished] c9293039 ursa-i9-9960x
[Finished] c9293039 ursa-thinkcentre-m75q
[Finished] 7198676a ec2-t3-xlarge-us-east-2
[Finished] 7198676a test-mac-arm
[Finished] 7198676a ursa-i9-9960x
[Finished] 7198676a ursa-thinkcentre-m75q
Supported benchmarks:
ec2-t3-xlarge-us-east-2: Supported benchmark langs: Python, R. Runs only benchmarks with cloud = True
test-mac-arm: Supported benchmark langs: C++, Python, R
ursa-i9-9960x: Supported benchmark langs: Python, R, JavaScript
ursa-thinkcentre-m75q: Supported benchmark langs: C++, Java

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rtpsw@westonpace@ursabot