header
sql中包含以下行:
select
row_number() over(order by (select NULL)) as id,
header.*
from header
我使用以下方法缓存数据集的结果:
Dataset<Row> headerRdd = spark.sql(header).cache();
headerRdd.createOrReplaceTempView("headerRdd");
在headerRdd -> rowRdd
之间使用确定性联接,rowRdd
中的每条记录都会得到header_id
:
select
headerRdd.id as header_id,
rowRdd.*
from headerRdd h
inner join rowRdd r on
h.foo = r.foo and
h.start <= r.time and
h.end >= r.time
结果是一个数据集rowHeaderRdd
,该数据集随后用于计算各种统计信息(彼此之间互不建立的独立查询)。
我最终看到的是计算出的统计信息似乎与相同的header_id
不匹配。
例如header_id = 1
statisticsA
和statisticB
都不匹配,即使它们都是有效的统计信息。
我的疑问是,在使用rowHeaderRdd
时,将以某种方式重新计算headerRdd
而不是从cache
进行加载。我说这是因为,当我开始进行确定性 header_id
创建时,问题就消失了-以为会有一些性能损失。
其他信息:
在该计划中,我可以看到使用了InMemoryTableScan
,但结果显示为相反。
我在将其复制到较小的数据集时遇到问题。使用更多数据时,发生此问题的可能性更高。
我尝试使用的Spark版本为: