我正在运行一个火花作业,该作业从teradata读取数据。查询看起来像
select * from db_name.table_name sample 5000000;
我正在尝试提取500万行数据的样本。当我尝试打印结果DataFrame中的行数时,每次运行时它都会给出不同的结果。有时是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
答案 0 :(得分:0)
尝试缓存结果数据框,并对数据框执行计数操作
df.cache()
println(s"Record count: ${df.count()}
从这里开始,当您重复使用df创建新的数据帧或进行任何其他转换时,不会得到不匹配的计数,因为它已经在缓存中。
确保您已提供足够的内存以将缓存的数据帧保存在内存中。