小编典典

spark,scala和jdbc-如何限制记录数

sql

有没有一种方法可以限制使用spark sql 2.2.0从jdbc源获取的记录数?

我正在处理将一个大于200M的记录从一个MS Sql Server表移动(和转换)到另一个MS Sql表的任务:

val spark = SparkSession
    .builder()
    .appName("co.smith.copydata")
    .getOrCreate()

val sourceData = spark
    .read
    .format("jdbc")
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
    .option("url", jdbcSqlConnStr)
    .option("dbtable", sourceTableName)
    .load()
    .take(limit)

在工作的同时,很明显,它首先要从数据库中加载所有200M条记录,首先要花18分钟的时间,然后将我希望用于测试和开发目的的有限数量的记录返回给我。

在take(…)和load()之间切换会产生编译错误。

我很欣赏有几种方法可以将样本数据复制到较小的表中,使用SSIS或其他etl工具。

我真的很好奇是否有一种方法可以使用spark,sql和jdbc实现我的目标。


阅读 314

收藏
2021-04-14

共1个答案

小编典典

要限制下载的行数,可以使用SQL查询代替“dbtable”中的表名。文档中的描述。

在查询中,可以指定“ where”条件,例如,使用特定于服务器的功能来限制行数(例如Oracle中的“ rownum”)。

2021-04-14