【问题标题】:Spark sql query optimizationSpark sql 查询优化
【发布时间】:2019-02-12 10:12:04
【问题描述】:

我想在 spark 数据框中加载一个数据表。我的数据库中有 2 个表。是否需要写 2 次完整连接选项? 有什么办法可以写一次公共部分,然后多次更改变量表名。

table1 = spark.read\
.format("jdbc")\
.option("url","jdbc:oracle:thin:USER/Password@host:port/db_name")\
.option("driver","oracle.jdbc.driver.OracleDriver" )\
.option("dbtable","table_name_1")\
.load()


table2 = spark.read\
    .format("jdbc")\
    .option("url","jdbc:oracle:thin:USER/Password@host:port/db_name")\
    .option("driver","oracle.jdbc.driver.OracleDriver" )\
    .option("dbtable","table_name_2")\
    .load()

【问题讨论】:

    标签: python-3.x apache-spark pyspark bigdata data-science


    【解决方案1】:

    请在sn-p下面,希望对你有帮助。

    def load_table_df(table_name):
        # You can define "jdbc:oracle:thin:USER/Password@host:port/db_name" as parameter too.
        return spark.read\
            .format("jdbc")\
            .option("url","jdbc:oracle:thin:USER/Password@host:port/db_name")\
            .option("driver","oracle.jdbc.driver.OracleDriver" )\
            .option("dbtable", table_name)\
            .load()
    
    table1 = load_table_df('table_name_1')
    table2 = load_table_df('table_name_2')
    

    【讨论】:

    • 谢谢,有什么方法可以在不使用函数调用的情况下做到这一点?
    • 如果你想要 2 个数据框,你需要调用函数,我不知道没有函数调用的不同解决方案。但是函数调用有什么缺点吗?
    • @DuyNguyenHoang 我认为多次调用函数或多次编写完整代码实际上是相同的(不考虑代码行数)。
    【解决方案2】:

    您可以单独创建阅读器

    reader = (spark.read
      .format("jdbc")
      .option("url","jdbc:oracle:thin:USER/Password@host:port/db_name")
      .option("driver","oracle.jdbc.driver.OracleDriver" ))
    

    加载

    table1 = reader.option("dbtable","table_name_1").load()
    table2 = reader.option("dbtable","table_name_2").load()
    

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 2020-04-12
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2013-01-10
      • 2014-02-04
      • 2014-11-16
      相关资源
      最近更新 更多