火花:DataFrame中的记录数在不同的运行中是不同的

时间:2018-08-23 04:49:02

标签: apache-spark dataframe apache-spark-sql teradata

我正在运行一个火花作业,该作业从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

1 个答案:

答案 0 :(得分:0)

尝试缓存结果数据框,并对数据框执行计数操作

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

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

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