gpt4 book ai didi

java - Pig 将制表符 (\t) 作为动态 CSV 解析的参数

转载 作者:行者123 更新时间:2023-12-01 13:12:21 24 4
gpt4 key购买 nike

我正在使用文件(CSV',' TSV '\t' ';')中的任何分隔符数据解析数据文件该方法适用于“,”和“;”但不使用制表符“\t”,我们如何将制表符作为参数传递给pig?

Python代码

delimiter = '\t'
cmd = 'pig -f sample.pig -p file='+data_file +' -p delimiter=' + delimiter
subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT)

pig

-- REGISTER 'piggybank.jar'
-- may use CSVExcelStorage in future
results = LOAD '$file' USING PigStorage('$delimiter');

我遇到以下异常

2014-03-31 03:26:41,412 [main] INFO  org.apache.pig.tools.parameters.ParameterSubstitutionPreprocessor - The parameter: "delimiter= " cannot be parsed by Pig. Please double check it
2014-03-31 03:26:41,412 [main] INFO org.apache.pig.tools.parameters.ParameterSubstitutionPreprocessor - Parser give the follow error message:
2014-03-31 03:26:41,413 [main] INFO org.apache.pig.tools.parameters.ParameterSubstitutionPreprocessor - Encountered "<EOF>" at line 1, column 16.
Was expecting one of:
<IDENTIFIER> ...
<OTHER> ...
<LITERAL> ...
<SHELLCMD> ...

最佳答案

这里不要使用 shell; tab 是 shell 的空白,不作为参数发送:

cmd = ['pig', '-f', 'sample.pig', '-p', 'file=' + data_file, '-p',
'delimiter=' + delimiter]
subprocess.Popen(cmd, stderr=subprocess.STDOUT)

请注意,我在这里将 shell 保留为默认的 False;当您可以直接调用 pig 时,无需将此命令传递给 shell。将 shell 保留为 False,改为传入参数列表。

即使如此,我认为你可能必须给pig序列\t(两个字符):

delimiter = '\\t'

或使用原始字符串:

delimiter = r'\t'

如果这不起作用,您将不得不求助于特殊外壳;我只读了pig latin expressions reference ,所以这是未经测试的,但我随后使用条件表达式和 TAB 作为命令行参数:

results = LOAD '$file' USING PigStorage('$delimiter' == 'TAB' ? '\t' : '$delimiter');

在 Python 中:

delimiter = 'TAB'

关于java - Pig 将制表符 (\t) 作为动态 CSV 解析的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com