【问题标题】:Error: "embedded nul in string" when collecting word count in sparklyr in R错误:在 R 中的 sparklyr 中收集字数时出现“在字符串中嵌入 nul”
【发布时间】:2021-07-12 15:50:40
【问题描述】:

我有一个 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'

经过一番研究 (Beginner trying to read a CSV with R: Embedded nul in string) 后,似乎:

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

有些人已经问过类似的问题 (Sparklyr "embedded nul in string" when collecting),但他们没有得到明确的答案。

我怎样才能去掉字符串中的这个“nul”? dplyr 可以帮我解决这个问题吗? sparklyr 中有什么功能可以解决这个问题吗?

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

谢谢!

【问题讨论】:

  • 你可以试试iconv(x, "latin1", "ASCII", "?") 在包含nul 字符串的列上,看看这是否去掉了特殊字符。这是我在 3 年前使用遇到类似错误的 MSSQL 数据库时使用的。
  • 谢谢@SinhNguyen。我正在尝试使用该函数,但它以字符向量作为输入,到目前为止,我还没有找到将 Spark 数据帧中的列转换为某种字符向量的方法...

标签: r apache-spark dplyr error-handling sparklyr


【解决方案1】:

R 对 nuls 有点讲究。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多