如何在 csv 文件中忽略带引号的换行符以创建 Hive 外部表?

Posted

技术标签:

【中文标题】如何在 csv 文件中忽略带引号的换行符以创建 Hive 外部表?【英文标题】:How to ignore new line characters with quotes in csv file for creating Hive External Table? 【发布时间】:2020-09-13 05:17:25 【问题描述】:

作为 R 数据集大量数据迁移的一部分,我正在创建 Hive 外部表。我使用 R 程序进行以下操作。 读取 R 中的所有 rds/sas 文件 --> 创建 csv --> 上传到 hdfs --> 创建 Hive 外部表

问题:引号内的某些字段值中有新字符,因此我的源数据集的行数较少,而配置单元表显示更多行,因为一些记录正在移动到下一个新行。 请参阅下面的示例记录。

Excel中的CSV文件显示数据如下:

Notepad++ 显示如下:

问题:如何仅忽略/删除引号内的换行符,而不是行尾的换行符,使用 R 程序。

【问题讨论】:

【参考方案1】:

这听起来更像是 Hive 的问题,我不熟悉它,但它似乎应该支持字段内的换行符。

您可以在保存到 csv 之前执行此操作:

# Example data.frame
DF <- data.frame(1, "aaa", "bb\nb")


library(tidyverse)

DF %>%
  mutate(across(everything(), ~str_remove_all(.x, "\n"))) %>%
  write_csv("test.csv")

或基本的 R 等效项:

for(col in names(DF))
  DF[[col]] <- gsub("\n", "", DF[[col]])

【讨论】:

我认为这将删除所有 "\n" 但我只想删除引号内的那些而不是行尾,因为行尾 "\n" 需要识别新行或行尾。 如果你在data.frame 之前 写csv,没有行尾。这只会在字段内完成。调用 wite.csv()write_csv() 后,字段会被引号括起来,并用逗号粘在一起,并根据需要添加换行符。

以上是关于如何在 csv 文件中忽略带引号的换行符以创建 Hive 外部表?的主要内容,如果未能解决你的问题,请参考以下文章

CSV文件格式要求

CSV 解析包含双引号和逗号的字符串

如何用Java解析CSV文件

csv文件

在引用的 csv 中匹配未转义的引号

CSV文件格式介绍