2016-02-26 81 views
1

我想读取由HIVE表创建的HDFS文件。该文件是文本格式。当我打开这些文件时,我惊讶地发现这些行没有任何字段分隔符。配置单元数据库文件没有分隔符

Hive可以读取文件...但非常非常慢。因此我想使用Spark工作读取内容。

,以了解该表的架构我做了

describe extended foo 

,我看到这个输出

Detailed Table Information Table(tableName:foo, dbName:bar, owner:me, 
createTime:1456445643, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols: 
[FieldSchema(name:some_ts, type:int, comment:null), FieldSchema(name:id, 
type:string, comment:null), FieldSchema(name:t_p_ref, type:string, 
comment:null) location:hdfs://nameservice1/user/hive/bar.db/ft, 
inputFormat:org.apache.hadoop.mapred.TextInputFormat, 
outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, 
compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, 
serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters: 
{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, 
skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], 
skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], 
parameters:{numFiles=79, COLUMN_STATS_ACCURATE=true, 
transient_lastDdlTime=1456446229, totalSize=8992777753, numRows=20776467, 
rawDataSize=8972001286}, viewOriginalText:null, viewExpandedText:null, 
tableType:MANAGED_TABLE) 

所以输出不显示在所有“DELIM”。那么我怎么读这个文件呢? 一些字段的是网址,因此,其挺难尝试读取它作为一个固定宽度类型的文件

回答

1

的为什么不读通过火花SQL数据 - 这是相当幸福的使用HiveContext读蜂巢表?在这种情况下,您也可以从数据框中正确设置数据类型。

因此,像

val hc = new HiveContext(sc) 
val df = hc.sql("select * from foo limit 10") 
// perform operations on your dataframe .. 
+0

不会是同样慢?因为它仍然在引擎盖下使用Hive。 –

+1

不,它不使用引擎盖下的配置单元 - 只有Hive Metastore用于元数据。 Spark可以在Spark计算框架内与数十到数百名工作人员一起工作,这比Hive更快。 – javadba

相关问题