2017-01-27 4 views
0

私はsparkデータフレームで読みたいHDFSに大きなインデックス付きlzoファイルを持っています。このファイルには、jsonドキュメントの行が含まれています。Spark DataFramesのjson行のLZOファイルを読む

posts_dir='/data/2016/01' 

posts_dirには、以下のがあります。

/data/2016/01/posts.lzo 
/data/2016/01/posts.lzo.index 

以下の作品が、インデックスを利用していないので、それが唯一のマッパーを使用しているので、長い時間がかかります。

posts = spark.read.json(posts_dir) 

インデックスを活用する方法はありますか?

答えて

0

Iは最初のインデックスを認識RDDを作成し、Iが良い以上の知りません効果spark.read.json(...)

posts_rdd = sc.newAPIHadoopFile(posts_dir, 
           'com.hadoop.mapreduce.LzoTextInputFormat', 
           'org.apache.hadoop.io.LongWritable', 
           'org.apache.hadoop.io.Text') 

posts_df = posts_rdd.map(lambda x:Row(x[1]))\ 
        .toDF(['raw'])\ 
        .select(F.from_json('raw', schema=posts_schema).alias('json')).select('json.*') 

に同様の結果を生成する、StructTypeに各行を有効にするfrom_json関数を使用してこれを解決簡単な方法。

関連する問題