Hadoop中条件文件的处理

Hadoop中条件文件的处理,hadoop,apache-spark,hive,apache-pig,Hadoop,Apache Spark,Hive,Apache Pig,我被困住了,到目前为止找不到任何解决办法。 我需要将固定长度的文件转换为带分隔符的控件,但文件模式是这样的:基于某个属性,即记录类型,该特定记录的架构会发生更改。我不知道谁可以将此固定文件转换为带分隔符的文件 样本记录: NCBDX**DD**00C98 0002016-01-0402.30.33013000895527 821064 07.30.332016-01-0400895527 000000 NCBDX**DT**00C98

我被困住了,到目前为止找不到任何解决办法。 我需要将固定长度的文件转换为带分隔符的控件,但文件模式是这样的:基于某个属性,即记录类型,该特定记录的架构会发生更改。我不知道谁可以将此固定文件转换为带分隔符的文件

样本记录:

NCBDX**DD**00C98             0002016-01-0402.30.33013000895527        821064      07.30.332016-01-0400895527        000000
NCBDX**DT**00C98           5108050000007851   000821064                                 0R 

Abinitio DML :-
record  //RECORD-START
    ascii string(1) RECORD_PREFIX;
    ascii string(4) TRANSMISSION_PROCESS;
    ascii string(2) RECORD_TYPE;
    ascii string(5) HEADER_INSTITUTION_ID;
    ascii string(11) HEADER_PREFIX_NUMBER;
if (record_type=="DT") //Changed single quotes to double quotes - Sathish Ethiraj
  record  //digital_transaction_rec
        ascii string("\001") dt_cardholder_account_number=NULL("");
        ascii decimal("\001") dt_member_number=NULL("");
        ascii string("\001") dt_terminal_sequence_number=NULL("");
        ascii string("\001") dt_tokenization_message_type=NULL("");
        ascii string("\001") dt_payment_token=NULL("");
        ascii string("\001") dt_token_expiration_date=NULL("");
        ascii string("\001") dt_account_number_indicator=NULL("");
        ascii string("\001") dt_tokenization_event_indicator=NULL("");
        ascii string("\001") dt_transaction_status_indicator=NULL("");
        ascii string("\001") dt_transaction_category_code=NULL("");
        ascii string("\001") dt_payment_initiation_channel=NULL("");
        ascii string("\001") dt_wallet_program_indicator=NULL("");
        ascii string("\001") dt_on_behalf_service_1=NULL("");
        ascii string("\001") dt_on_behalf_service_2=NULL("");
        ascii string("\001") dt_on_behalf_result_1=NULL("");
        ascii string("\001") dt_on_behalf_result_2=NULL("");
        ascii string("\001") dt_primary_account_number_source=NULL("");
        ascii string("\001") dt_payment_appn_instance_id=NULL("");
if (record_type=="DD")
  record // DOLLAR-LOG-REC
        ascii string("\001") dd_hdr_instun_id =NULL("");
        ascii string("\001") dd_hdr_prfx_num =NULL("");
        ascii string("\001") dd_cdhldr_acct_num =NULL("");
        ascii string("\001") dd_mbr_num =NULL("");
        ascii string("\001") dd_mtv_trxn_dt =NULL("");
        ascii string("\001") dd_mtv_trxn_tm =NULL("");
        ascii string("\001") dd_trxn_rqst_type_cd =NULL("");
        ascii string("\001") dd_trmnl_num =NULL("");
        ascii string("\001") dd_trmnl_seq_num =NULL("");

我尝试使用substr函数并将其加载到配置单元中,但无法设置条件。这方面的任何帮助都将非常有用。

配置单元中的表必须有一个已定义的模式,该模式不能根据输入进行更改。。。
也许您可以将输入文件拆分为两个文件——record_type==“DT”和record_type==“DD”,然后将它们分别加载到不同的表中。

配置单元中的表必须具有定义的模式,该模式不能随输入而改变。。。
也许您可以将输入文件拆分为两个文件-record_type==“DT”和record_type==“DD”,然后将它们分别加载到不同的表中。

谢谢Alex,我们正在使用pig拆分文件,我在HIVE中也尝试过同样的操作。谢谢Alex,我们正在使用pig拆分文件,我在HIVE中也尝试过同样的操作。