可以理解的是,当从oracle db迁移/加载到hdfs/parquet时,它更倾向于使用SQOOP,而不是使用JDBC驱动程序。
火花应该比处理时快100倍,对吗?那火花有什么问题?为什么人们在从oracle表加载数据时更喜欢SQOOP?
请建议我应该做什么,以使火花更快的时候,从甲骨文加载数据。
发布于 2019-05-24 09:58:47
当Spark知道如何并行查询时,它是快速的。如果您只是在执行单个查询,那么Spark就不知道该做什么。在使用lowerBound读取数据时,可以使用参数numPartitions、upperBound、numPartitions来提高速度,但这实际上取决于表的设计。
您可以找到更多的文档这里。
发布于 2019-05-28 08:09:20
亚历克斯的回答中已经提到了主要的问题。
我只想补充一个例子,
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自动执行边界查询以获取按列拆分的最小值、最大值(该查询也可以被重写)
https://stackoverflow.com/questions/56288481
复制相似问题