Smruti Biswal created HIVE-29785:
------------------------------------

             Summary: SkippingTextInputFormat: ClassCastException on 
skip.header.line.count files with lone-CR (\r) line endings
                 Key: HIVE-29785
                 URL: https://issues.apache.org/jira/browse/HIVE-29785
             Project: Hive
          Issue Type: Bug
          Components: HiveServer2
    Affects Versions: 4.2.1
            Reporter: Smruti Biswal


A SELECT count(*) on an uncompressed TEXTFILE table that has
'skip.header.line.count'='1' fails during Tez split generation with:
{code:java}
java.lang.ClassCastException: class java.io.PushbackInputStream cannot be cast 
to class org.apache.hadoop.fs.Seekable (java.io.PushbackInputStream is in 
module java.base of loader 'bootstrap'; org.apache.hadoop.fs.Seekable is in 
unnamed module of loader 'app')
         at 
org.apache.hadoop.fs.FSDataInputStream.getPos(FSDataInputStream.java:80)
         at 
org.apache.hadoop.hive.ql.io.SkippingTextInputFormat.getCachedStartIndex(SkippingTextInputFormat.java:127)
         at 
org.apache.hadoop.hive.ql.io.SkippingTextInputFormat.makeSplitInternal(SkippingTextInputFormat.java:76)
         at 
org.apache.hadoop.hive.ql.io.SkippingTextInputFormat.makeSplit(SkippingTextInputFormat.java:69)
         at 
org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:382)
         at 
org.apache.hadoop.hive.ql.io.HiveInputFormat.addSplitsForGroup(HiveInputFormat.java:543)
         at 
org.apache.hadoop.hive.ql.io.HiveInputFormat.getSplits(HiveInputFormat.java:851)
         at 
org.apache.hadoop.hive.ql.exec.tez.HiveSplitGenerator.initialize(HiveSplitGenerator.java:289){code}
The issue appears only on lone-CR (\r) line endings. LF (\n) and CRLF (\r\n) 
are unaffected.
Even if bare-CR isn't valid CSV, the ClassCastException is misleading.  It 
should fail with a
clear error message relating to line terminator or be handled.

*Repro :*

 
{code:java}
# printf "id;name;place;\n1;smruti;ctc;\n2;biswal;bbsr;\n3;'';NULL;\n" > 
data1.csv
# tr '\n' '\r' < data1.csv > data1_cr_only.csv
# od -c data1_cr_only.csv 
0000000   i   d   ;   n   a   m   e   ;   p   l   a   c   e   ;  \r   1
0000020   ;   s   m   r   u   t   i   ;   c   t   c   ;  \r   2   ;   b
0000040   i   s   w   a   l   ;   b   b   s   r   ;  \r   3   ;   '   '
0000060   ;   N   U   L   L   ;  \r
0000067
{code}
Use the data1_cr_only.csv  in a table with  _skip.header.line.count_ or  
_skip.footer.line.count_ set.
{code:java}
CREATE TABLE text_split_test (id INT, name STRING, place STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ';'
STORED AS TEXTFILE
TBLPROPERTIES ('skip.header.line.count' = '1'); {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to