在 Spark DataFrames 中读取 json 行的 LZO 文件
Reading LZO file of json lines in Spark DataFrames
我在 HDFS 中有一个大型索引 lzo 文件,我想在 spark 数据帧中读取它。该文件包含 json 行文档。
posts_dir='/data/2016/01'
posts_dir
具有以下内容:
/data/2016/01/posts.lzo
/data/2016/01/posts.lzo.index
下面的工作但没有使用索引,因此需要很长时间,因为它只使用一个映射器。
posts = spark.read.json(posts_dir)
有没有办法让它利用索引?
我通过首先创建一个识别索引的 RDD 然后使用 from_json
函数将每一行变成 StructType
来解决这个问题,有效地产生与 spark.read.json(...)
[=14 相似的结果=]
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.*')
我不知道更好或更直接的方法。
我在 HDFS 中有一个大型索引 lzo 文件,我想在 spark 数据帧中读取它。该文件包含 json 行文档。
posts_dir='/data/2016/01'
posts_dir
具有以下内容:
/data/2016/01/posts.lzo
/data/2016/01/posts.lzo.index
下面的工作但没有使用索引,因此需要很长时间,因为它只使用一个映射器。
posts = spark.read.json(posts_dir)
有没有办法让它利用索引?
我通过首先创建一个识别索引的 RDD 然后使用 from_json
函数将每一行变成 StructType
来解决这个问题,有效地产生与 spark.read.json(...)
[=14 相似的结果=]
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.*')
我不知道更好或更直接的方法。