Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe spark jdbc-到源的多个连接?_Dataframe_Apache Spark_Hadoop_Spark Jdbc - Fatal编程技术网

Dataframe spark jdbc-到源的多个连接?

Dataframe spark jdbc-到源的多个连接?,dataframe,apache-spark,hadoop,spark-jdbc,Dataframe,Apache Spark,Hadoop,Spark Jdbc,有人提到,当我们使用spark.read JDBC生成一个数据帧时,然后如果我们在该数据帧上执行df.write两次**它是否创建到源的两个连接?**我需要一些关于spark内部运作的更多见解的帮助 假设我创建了一个函数来返回df read_df(): df = spark.read.format("jdbc").option("header", "true").option("inferSchema","

有人提到,当我们使用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,如下所示,这真的会有两个到源的连接吗?若有,;如何避免这种情况,并且只读一次。有关spark for load quotes load()的文档“从数据源加载数据并将其作为:class
DataFrame
”返回,因此需要更多关于内部作用的上下文

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

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

两个明显的行动


缓存也有代价。

你能接受这个答案吗?