一、字段帶逗號
100,"600,000,000.00",李世民
比如上面這行數(shù)據(jù),字段"600,000,000,00"帶多個逗號,這個可以用hive中內(nèi)置的語句來解決,使用OpenCSVSerde來解析CSV格式的數(shù)據(jù),并指定了CSV文件中使用的分隔符、引號字符和轉(zhuǎn)義字符
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties (
'separatorChar' = ',',
'quoteChar' = '\"',
'escapeChar' = '\\'
)
- ‘separatorChar’ = ‘,’:指定CSV文件中使用的分隔符為逗號(,)
- ‘quoteChar’ = ‘"’:指定CSV文件中使用的引號字符為雙引號(")
- ‘escapeChar’ = ‘\’:指定CSV文件中使用的轉(zhuǎn)義字符為反斜杠(\)
這段代碼表示分隔符為逗號,""中間的逗號不進(jìn)行處理文章來源:http://www.zghlxwxcb.cn/news/detail-507162.html
二、字段帶換行符
Name,Age,Address
Alice,25,"123 Main St.
Apt. 456"
Bob,30,"789 Oak St."
比如上面這段數(shù)據(jù),本來是兩條數(shù)據(jù),但第一條數(shù)據(jù)第三個字段中間多了個換行符,在load data進(jìn)hive的時候就變成了三條數(shù)據(jù)
網(wǎng)上找了很久,沒有看到hive能直接處理這種字段中間帶換行符的方式,所以只能對csv文件進(jìn)行預(yù)處理
1、用shell腳本sed命令正則表達(dá)式匹配替換""中間的換行符
2、用其它語言腳本處理csv文件替換換行符文章來源地址http://www.zghlxwxcb.cn/news/detail-507162.html
#!/usr/bin/python
# -*- coding:utf-8 -*-
#處理csv文件中換行符等特殊字符(\r\n,\n,\r,\\)
#python csv_handler.py filepath
import os
import sys
import csv
import codecs
import time
filename = sys.argv[1]
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),'[', filename.encode('unicode_escape').decode(), ']開始處理')
with open(filename, 'r') as srcFile, open(filename + '.tmp', 'w') as dstFile:
#讀取csv文件的每一行
fileReader = csv.reader(srcFile)
fileWriter = csv.writer(dstFile, quoting=csv.QUOTE_ALL)
for d in list(fileReader):
for ii,dd in enumerate(d):
if dd.find('\r\n') != -1:
dd = dd.replace('\r\n', ' ')
if dd.find('\n') != -1:
dd = dd.replace('\n', ' ')
if dd.find('\r') != -1:
dd = dd.replace('\r', ' ')
if dd.find('\\') != -1:
dd = dd.replace('\\', '')
d[ii] = dd
fileWriter.writerow(d)
dstFile.close()
srcFile.close()
#刪除原文件,.tmp文件重命名為原文件
os.remove(filename)
os.rename(filename + '.tmp', filename)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),'[', filename.encode('unicode_escape').decode(), ']處理完成')
三、字段帶逗號和換行符
- 直接把上面兩種結(jié)合起來就可以了,建表使用字段帶逗號那里的方式,然后預(yù)處理CSV文件,最后直接load data即可
到了這里,關(guān)于Hive學(xué)習(xí):Hive導(dǎo)入字段帶逗號和換行符的CSV文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!