') + ')', '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('^' + ".*" + ', '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" + ', '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('^' + ".*" + ', '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); } })(); })(); [R] Disable row-level metadata application on datasets · Issue #28879 · apache/arrow · GitHub
Skip to content

[R] Disable row-level metadata application on datasets #28879

Description

@asfimport

In order to support things like SF columns, we have added code that handles row-level metadata (#8549 and #9182).

These work just fine in a single table or single parquet file circumstance, but when using a dataset (even without filtering!) this can produce some surprising (and wrong) results (see reprex below).

There is already some work underway to make it easier to convert the row-element-level attributes to a struct + store it in the column in the ARROW-12542 work, but that's still a bit off. But even once that's done, should we disable this totally? Stop or ignore+warn that with datasets row-level metadata isn't applied (since there's no way for us to get the ordering right)? Something else?

library(arrow)
df<-tibble::tibble(
part= rep(1:2, 13),
let=letters
)
df$embedded_attr<- lapply(seq_len(nrow(df)), function(i) {
value<-"nothing"
attributes(value) <-list(letter=df[[i, "let"]])
value
})
df_from_tab<- as.data.frame(Table$create(df))
# this should be (and is) "b"
attributes(df_from_tab[df_from_tab$let=="b", "embedded_attr"][[1]][[1]])
#> $letter#> [1] "b"# the dfs are the samewaldo::compare(df, df_from_tab)
#> ✓ No differences# now via datasetdir<-"ds-dir"
write_dataset(df, path=dir, partitioning="part")
ds<- open_dataset(dir)
df_from_ds<-dplyr::collect(ds)
# this should be (and is not) "b"
attributes(df_from_ds[df_from_ds$let=="b", "embedded_attr"][[1]][[1]])
#> $letter#> [1] "n"# Even controlling for order, the dfs are not the samewaldo::compare(dplyr::arrange(df, let), dplyr::arrange(df_from_ds, let))
#> `names(old)`: "part" "let" "embedded_attr" #> `names(new)`: "let" "embedded_attr" "part"#> #> `attr(old$embedded_attr[[2]], 'letter')`: "b"#> `attr(new$embedded_attr[[2]], 'letter')`: "n"#> #> `attr(old$embedded_attr[[3]], 'letter')`: "c"#> `attr(new$embedded_attr[[3]], 'letter')`: "b"#> #> `attr(old$embedded_attr[[4]], 'letter')`: "d"#> `attr(new$embedded_attr[[4]], 'letter')`: "o"#> #> `attr(old$embedded_attr[[5]], 'letter')`: "e"#> `attr(new$embedded_attr[[5]], 'letter')`: "c"#> #> `attr(old$embedded_attr[[6]], 'letter')`: "f"#> `attr(new$embedded_attr[[6]], 'letter')`: "p"#> #> `attr(old$embedded_attr[[7]], 'letter')`: "g"#> `attr(new$embedded_attr[[7]], 'letter')`: "d"#> #> `attr(old$embedded_attr[[8]], 'letter')`: "h"#> `attr(new$embedded_attr[[8]], 'letter')`: "q"#> #> `attr(old$embedded_attr[[9]], 'letter')`: "i"#> `attr(new$embedded_attr[[9]], 'letter')`: "e"#> #> `attr(old$embedded_attr[[10]], 'letter')`: "j"#> `attr(new$embedded_attr[[10]], 'letter')`: "r"#> #> And 15 more differences ...

Reporter: Jonathan Keane / @jonkeane
Assignee: Jonathan Keane / @jonkeane

Related issues:

PRs and other links:

Note: This issue was originally created as ARROW-13189. Please see the migration documentation for further details.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions