微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spark jdbc-到源的多个连接?

如何解决spark jdbc-到源的多个连接?

有人提到,当我们使用spark.read JDBC生成一个数据帧时,然后在该数据帧上执行df.write两次。 **它会创建到源的两个连接吗? **我需要一些帮助,以获取更多有关Spark内部工作的见解。

所以假设我创建了一个返回df的函数

read_df():
df = spark.read.format("jdbc").option("header","true").option("inferSchema","true").option("url",jdbc_str[0]).option("lowerBound",mini).option("upperBound",maxi).option("numPartitions",num_partitions). option("partitionColumn",df_info[2]).option("dbtable",tablename).option("user",df_info[0]).option("password",df_info[1]).option("driver","com.informix.jdbc.IfxDriver").load()
return df

现在我要把上面函数返回的df放在两个地方写。

def write_df_delta(df):
df.write.format("delta").partitionBy("partitioncolumn").save(location)
return "successful"
def write_df_csvserde(df):
df.coalesce(1).write.option("header","true").mode("append").csv(target_dir)
return "successful"

现在,如果我按以下方式在main中调用名称,那是否真的可以与源建立两个连接?如是;如何避免这种情况并且只读一次。有关负载here的spark文档,引用了load()“从数据源加载数据并将其作为a:class DataFrame返回。”因此需要更多有关这里内部活动的背景信息。

def main():
df=read_df()
status = write_df_delta(df)  
status = write_df_csvserde(df)
if __name__ == '__main__' :
    main()

解决方法

由于您没有.cache.persist,它将从JDBC源读取两次。

两个动作明显。

缓存也有成本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?