可以理解,当从oracledb迁移/加载到hdfs/parquet时,最好使用sqoop而不是带有jdbc驱动程序的spark。Spark应该是100倍快时,处理的权利?那spark怎么了?为什么人们在从oracledb表加载数据时更喜欢sqoop?请建议我应该做什么,使Spark更快地加载数据时,从甲骨文。
9jyewag01#
亚历克斯的回答中已经提到了要点。我只想再举个例子,
from pyspark.sql import SparkSession spark = SparkSession.builder.master("local[4]").appName("Test-JDBC").getOrCreate() ds = spark.read.jdbc("jdbc:mysql://localhost:3306/stackexchange", "(select min(id), max(id) from post_history) as ph", properties={"user": "devender", "password": "*****", "driver": "com.mysql.jdbc.Driver"}) r = ds.head() minId = r[0] maxId = r[1] ds = spark.read.jdbc("jdbc:mysql://localhost:3306/stackexchange", "(select * from post_history) as ph", properties={"user": "devender", "password": "*****", "driver": "com.mysql.jdbc.Driver"}, numPartitions=4, column="id", lowerBound=minId, upperBound=maxId) count = ds.count() print(count)
更多细节,https://gist.github.com/devender-yadav/5c4328918602b7910ba883e18b68fd87注意:sqoop自动执行边界查询以获取按列拆分的最小值和最大值(该查询也可以被重写)
jum4pzuy2#
spark知道如何并行查询时速度很快。如果您只是执行一个查询,那么spark不知道该做什么。通过使用参数可以提高速度 lowerBound , upperBound , numPartitions 使用读取数据时 spark.read.jdbc ,但这实际上取决于您的table的设计。您可以在这里找到更多文档。
lowerBound
upperBound
numPartitions
spark.read.jdbc
2条答案
按热度按时间9jyewag01#
亚历克斯的回答中已经提到了要点。
我只想再举个例子,
更多细节,https://gist.github.com/devender-yadav/5c4328918602b7910ba883e18b68fd87
注意:sqoop自动执行边界查询以获取按列拆分的最小值和最大值(该查询也可以被重写)
jum4pzuy2#
spark知道如何并行查询时速度很快。如果您只是执行一个查询,那么spark不知道该做什么。通过使用参数可以提高速度
lowerBound
,upperBound
,numPartitions
使用读取数据时spark.read.jdbc
,但这实际上取决于您的table的设计。您可以在这里找到更多文档。