首页 > 解决方案 > 错误:在 R 中的 sparklyr 中收集字数时出现“在字符串中嵌入 nul”

问题描述

我有一个 Spark 数据框(在 R 中带有“sparklyr”包),其中包含来自 3 个数据源(新闻、博客和推特)的几个单词的字数。我正在尝试使用collect()将数据从 Spark 复制到 R 的内存。

在使用 sparklyr 计算具有用于文本挖掘的多个功能的单词后,我有以下内容:

> word_count

# Source:     spark<?> [?? x 3]
# Groups:     dataset
# Ordered by: desc(n)
   dataset word        n
   <chr>   <chr>   <int>
 1 news    said   250414
 2 blogs   one    127526
 3 twitter like   122384
 4 twitter get    112510
 5 twitter love   106122
 6 twitter good   100844
 7 blogs   like   100105
 8 twitter day     91559
 9 blogs   time    90609
10 twitter thanks  89513
# ... with more rows

现在,如果我尝试使用collect(),我会收到以下错误:

> full_word_count <- collect(word_count)

Error in RecordBatch__to_dataframe(x, use_threads = option_use_threads()) : 
  embedded nul in string: '\0\0ul437'

经过一番研究(初学者尝试使用 R: Embedded nul in string 读取 CSV),似乎:

错误消息指出您嵌入了一个 nul 字符...:\0 表示 ASCII 字节 == 0,这在 R 字符串中是禁止的(在内部,它表示字符串的结尾)。

有些人已经问过类似的问题(Sparklyr “在收集时将 nul 嵌入字符串”),但他们没有得到明确的答案。

我怎样才能摆脱字符串中的这个“nul”?dplyr 可以帮我解决这个问题吗?sparklyr 中是否有任何功能可以解决此问题?

我正在尝试将此 Spark 数据帧收集到 R 的内部存储器,以最终将其导出为 CSV 或 XLSX 文件以供进一步分析。

谢谢!

标签: rapache-sparkdplyrerror-handlingsparklyr

解决方案


R 对 nuls 有点特别。

您可以在收集之前替换 Spark 端的 nuls ("\0")。有问题的字符串很可能在您的word列中:

word_count %>%
replace(word, "\0","") %>%
sdf_collect()

或者,您可以进入与文本挖掘相关的编码/解码地狱:P


推荐阅读