spark:数据帧中的记录数在不同的运行中是不同的



我正在运行一个从 teradata 读取数据的 Spark 作业。查询如下所示

select * from db_name.table_name sample 5000000;

我正在尝试提取 500 万行数据的样本。当我尝试打印结果数据帧中的行数时,每次运行时都会给出不同的结果。有时是4999937,有时是5000124.这种行为有什么特别的原因吗?

编辑#1:

我正在使用的代码:

val query = "(select * from db_name.table_name sample 5000000) as data"
var teradataConfig = Map("url"->"jdbc:teradata://HOSTNAME/DATABASE=db_name,DBS_PORT=1025,MAYBENULL=ON",
"TMODE"->"TERA",
"user"->"username",
"password"->"password",
"driver"->"com.teradata.jdbc.TeraDriver",
"dbtable" -> query)
var df =  spark.read.format("jdbc").options(teradataConfig).load()
df.count

尝试缓存生成的数据帧并对数据帧执行计数操作

df.cache()
println(s"Record count: ${df.count()}

从现在开始,当您重用 df 来创建新的数据帧或任何其他转换时,您不会获得不匹配的计数,因为它已经在缓存中。

确保已提供足够的内存来将缓存的数据帧保存在内存中。

相关内容

最新更新