在 apache spark 中创建 Dataframe 和 select(或类似操作或方法)时建立的连接
Connection made during the creation of Dataframe and select (or like operation or method) on created Dataframe in apache spark
我正在寻找以下问题的解决方案。
- 问题:当我们在 Apache Spark 中创建 Dataframe 时,使用来自数据库的 table,很明显会建立连接。但是如果我执行一些操作(比如 select()),它会尝试重新连接吗?
- 或者所有的操作都会被记住,只有一次请求以延迟加载的方式建立连接?
*基本上,我担心对我的数据库进行最少的调用(请求)。
因为我听说它可以很高效,特别是当你处理大数据时。就我而言,我可能致力于创建 Dataframe 并对其执行操作,其数据可以是大数据。所以,如果我只从数据库中获取一次数据,那将是明智的。
如果有人能帮助了解幕后发生的事情,那就太好了。
任何文献的建议,链接也很感激。
提前谢谢你..!
您的问题很笼统,根据驱动程序的不同,结果和行为可能会有所不同。
例如 - 假设您正在使用 Type-4 JDBC 驱动程序并在 SPARK_CLASSPATH
中添加驱动程序 jar 文件并且您的驱动程序支持连接池,那么一旦创建连接,它将被重用对于后续请求,但如果您的驱动程序没有,那么每次您发出新请求时,它都会创建不同的连接。 RDBMS 就是这种情况,Spark-1.6 支持以下 RDBMS:-
- MySQL
- Postgres
- DB2
- MySqlServer
- 甲骨文
- 德比
现在问你一个问题,一旦你从数据库加载数据并创建 DataFrame,那么你的数据现在已经存在于 Spark/集群内存中,并且所有后续查询,在同一个 DataFrame 上执行都是在数据上执行已经在内存中了。 Spark 不连接到任何底层数据库。但是如果你创建了一个新的 DataFrame,那么就会调用底层数据库。
同样重要的是要记住所有这些转换只会在我们调用 DataFrame 上的任何输出操作时发生,例如 print
或 registerTempTable
或 saveAs...
等
我正在寻找以下问题的解决方案。
- 问题:当我们在 Apache Spark 中创建 Dataframe 时,使用来自数据库的 table,很明显会建立连接。但是如果我执行一些操作(比如 select()),它会尝试重新连接吗?
- 或者所有的操作都会被记住,只有一次请求以延迟加载的方式建立连接?
*基本上,我担心对我的数据库进行最少的调用(请求)。
因为我听说它可以很高效,特别是当你处理大数据时。就我而言,我可能致力于创建 Dataframe 并对其执行操作,其数据可以是大数据。所以,如果我只从数据库中获取一次数据,那将是明智的。
如果有人能帮助了解幕后发生的事情,那就太好了。
任何文献的建议,链接也很感激。
提前谢谢你..!
您的问题很笼统,根据驱动程序的不同,结果和行为可能会有所不同。
例如 - 假设您正在使用 Type-4 JDBC 驱动程序并在 SPARK_CLASSPATH
中添加驱动程序 jar 文件并且您的驱动程序支持连接池,那么一旦创建连接,它将被重用对于后续请求,但如果您的驱动程序没有,那么每次您发出新请求时,它都会创建不同的连接。 RDBMS 就是这种情况,Spark-1.6 支持以下 RDBMS:-
- MySQL
- Postgres
- DB2
- MySqlServer
- 甲骨文
- 德比
现在问你一个问题,一旦你从数据库加载数据并创建 DataFrame,那么你的数据现在已经存在于 Spark/集群内存中,并且所有后续查询,在同一个 DataFrame 上执行都是在数据上执行已经在内存中了。 Spark 不连接到任何底层数据库。但是如果你创建了一个新的 DataFrame,那么就会调用底层数据库。
同样重要的是要记住所有这些转换只会在我们调用 DataFrame 上的任何输出操作时发生,例如 print
或 registerTempTable
或 saveAs...
等