【发布时间】: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