ARROW-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson
, '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-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson
, '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-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson
, '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-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson
, '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-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson
, '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-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson
, '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-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson
, '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-17387: [R] Implement dplyr::across() inside filter() - #14281

Merged
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest
Oct 11, 2022
Merged

ARROW-17387: [R] Implement dplyr::across() inside filter()#14281
thisisnic merged 15 commits into
apache:masterfrom
thisisnic:ARROW-17387_filter_latest

Conversation

@thisisnic

@thisisnicthisisnic commented Sep 30, 2022

Copy link
Copy Markdown
Member

The implementation differs here from dplyr in that some steps are removed as the dplyr functionality evaluates functions sooner and so has extra steps required.

@github-actions

Copy link
Copy Markdown

@thisisnicthisisnic changed the title ARROW-17387: [R] Implement dplyr::across() inside filter() [WIP]ARROW-17387: [R] Implement dplyr::across() inside filter()Sep 30, 2022
@thisisnic
thisisnic marked this pull request as ready for review September 30, 2022 10:17
Comment threadr/R/dplyr-across.R Outdated
@thisisnic
thisisnicforce-pushed the ARROW-17387_filter_latest branch from b2cdd9d to 0e6ab68CompareOctober 8, 2022 07:22

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

One suggested cleanup but otherwise LGTM!

Comment threadr/R/dplyr-across.R Outdated
Co-authored-by: Neal Richardson <neal.p.richardson@gmail.com>
Comment threadr/tests/testthat/test-dplyr-across.R Outdated
@thisisnic
thisisnic merged commit a1d7a44 into apache:masterOct 11, 2022
@ursabot

Copy link
Copy Markdown

Benchmark runs are scheduled for baseline = ece5b65 and contender = a1d7a44. a1d7a44 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
[Failed ⬇️0.0% ⬆️0.0%] test-mac-arm
[Failed ⬇️1.1% ⬆️0.0%] ursa-i9-9960x
[Finished ⬇️0.21% ⬆️0.0%] ursa-thinkcentre-m75q
Buildkite builds:
[Finished] a1d7a449 ec2-t3-xlarge-us-east-2
[Failed] a1d7a449 test-mac-arm
[Failed] a1d7a449 ursa-i9-9960x
[Finished] a1d7a449 ursa-thinkcentre-m75q
[Finished] ece5b654 ec2-t3-xlarge-us-east-2
[Failed] ece5b654 test-mac-arm
[Failed] ece5b654 ursa-i9-9960x
[Finished] ece5b654 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

@ursabot

Copy link
Copy Markdown

['Python', 'R'] benchmarks have high level of regressions.
ursa-i9-9960x

@jorisvandenbossche

Copy link
Copy Markdown
Member

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

I got notified in another PR (which was merged after this one) about potential perf regression, but so I think it is this PR that gives a slight slowdown in some benchmarks. The biggest regression (TPCH-08) seems a flaky measurement, but for TPCH-16 it seems persistent (although it's only a very small slowdown, no idea if it is significant)

What's a good way to investigate this? I wouldn't expect a slowdown from this PR, but can't rule it out entirely.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I suppose the easiest would be to first try to get the code behind that benchmark running locally (but not familiar with the R benchmarks for what's the easiest way to so this), and then if you can run it locally, then checking if you can reproduce the slowdown, and if so you can profile both cases (but again, I don't know how to do that in R)

@thisisnic

Copy link
Copy Markdown
MemberAuthor

Thinking about this more, I'd expect it to be a tiny bit slower but not enough to affect the benchmarks, and given that this block of code has been added to other operations which are used in the benchmarks, I'd expect to see a regression in those too if it was problematic. @jonkeane, I don't suppose you'd mind helping me take a look at this?

@nealrichardson

Copy link
Copy Markdown
Member

I don't think this is concerning. None of the TPC-H queries have the features that this PR adds support for, so there's not much extra work being added that would add meaningful time. I did a quick benchmark of the "fast" path of the function in question here, and it costs <1ms:

> q <- rlang:::quos(a + b, c + d, e - f, f(a, b, c))
> bench::mark(arrow:::expand_across(list(), q))
# A tibble: 1 × 13
expression min median itr/s…¹ mem_a…² gc/se…³ n_itr
<bch:expr> <bch:tm> <bch:> <dbl> <bch:b> <dbl> <int>
1 arrow:::expand_across(list(), q) 87.4µs 91.5µs 10755. 42.9KB 43.7 4923

@jorisvandenbossche

Copy link
Copy Markdown
Member

Conbench also only identified the 0.01 and 0.1 scale factors as slowdown. The same benchmark but with scale factor 1 or 10 didn't show a consistent slowdown: https://conbench.ursa.dev/compare/benchmarks/44eef0b11f204c09bebde7b2a4050c98...07d114936d9c4b94b69aa712f0a8423e/ (which matches with what Neal is saying)

@nealrichardson

Copy link
Copy Markdown
Member

Yeah, I've separately found those low scale factor benchmarks to be sensitive/flaky. They're useful in alerting when we add 10ms to the query assembly time (see also #13985), and those micro-regressions do add up if not addressed. But they're not all that noticeable if you're working with larger data.

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@thisisnic@ursabot@jorisvandenbossche@nealrichardson