hadoop - 如何加载hive表中的多行列数据?具有换行符的列

标签 hadoop hive apache-pig bigdata

我在 Excel 文件中有一列(不是最后一列)包含跨越几行的数据。

列的一些单元格是空白的,一些是单行条目。

当另存为 .CSV 文件或将 .txt 与 excel 分开的制表符时,所有多行数据和少量单行条目都生成在双引号中,所有空白字段都没有引号。一些单行条目不在引号内。

是否可以将具有相同结构的数据存储在配置单元表中?如果是,如何做到这一点? 我知道我需要在双引号内转义所有 LF,并只将最后一个 LF 作为实际的 EOL 来处理。但是当遇到 '\n' 时,Hive 会将数据带到新行。

excel中的数据格式如下:

|------+------+--------+------------------+-------+------|
|row1: | col1 | col2   | col3(multi-line) | col4  | col5 |
|------+------+--------+------------------+-------+------|
|      |      |        | line 1 of 3      |       |      |
|row2: | abc  | defsa  | line 2 of 3      | bcde  | hft  |
|      |      |        | line 3 of 3      |       |      |
|------+------+--------+------------------+-------+------|
|row3: | abc2 | defsa2 | (blank)          | bcde2 | hft2 |
|------+------+--------+------------------+-------+------|
|row4: | abc3 | defsa3 | single-line1     | bcde3 | hft3 |
|------+------+--------+------------------+-------+------|
|row5: | abc4 | defsa4 | single-line2     | bcde4 | hft4 |
|------+------+--------+------------------+-------+------|

当保存为 CVS 时,它输出到以下内容:

row1--col1,col2,col3(多行),col4,col5
row2--abc,defsa,第 1 行,共 3 行",,,,,,
row3--第 2 行,共 3 行,,,,,,
row4--第 3 行,共 3 行,,,,,,
row5--",bcde,hft
行 6--abc2,defsa2,,bcde2,hft2
row7--abc3,defsa3,single-line1,bcde3,hft3
row8--abc4,defsa4,single-line2",,,,,,
row9--",bcde4,hft4

5 行 excel 到 9 行 csv。

感谢将此 .csv 文件中的输入存储到配置单元表中,如果可能的话,无需更改结构和维护多行列。

最佳答案

From this link ,提供的 SerDe 无法处理嵌入的新行。我的猜测是,如果您想要嵌入新行,则必须创建自定义 SerDe。无需深入研究,this是一个很好的资源,可能有助于创建自定义 SerDe。

您是否尝试过在将数据加载到 Hive 之前使用 Pig 来处理数据,例如在将其移至 Hive 之前,您可以将\n 字符替换为其他内容。但是您可能会遇到同样的问题,即无法将它准确地加载到 Pig 中,因为它可能使用相同的 SerDe。

最终,自定义 SerDe 将解决您的问题,但可能还有另一种我没有看到的更简单的方法。

关于hadoop - 如何加载hive表中的多行列数据?具有换行符的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39832280/

相关文章:

hadoop - sqoop 导出到 sql server 失败

java.lang.NoClassDefFoundError 与 HBase 扫描

hadoop - Amazon Elastic MapReduce 在主节点上完成引导操作,但在核心节点上挂起

hadoop - hive 在 Spark 上。读取 Parquet 文件

hadoop - Hive/Impala - 在层次结构表中查找结束子节点

azure - 从 Azure HDInsights 中的分区 parquet 文件创建 Hive 外部表

hadoop - 一台机器上的 pig

hadoop - 无法在 Google Compute Engine 中安装 Hadoop

hadoop - 使用Pig时hadoop路径中的错误

java - pig : Reparse Strings into Tuples in Java