Apache spark 使用PySpark读取数据库的最快方法是什么?

Apache spark 使用PySpark读取数据库的最快方法是什么?,apache-spark,sqlalchemy,pyspark,Apache Spark,Sqlalchemy,Pyspark,我正在尝试使用PySpark和SQLAlchamy读取数据库表,如下所示: SUBMIT_ARGS=“--jars mysql-connector-java-5.1.45-bin.jar pyspark shell” os.environ[“PYSPARK_SUBMIT_ARGS”]=SUBMIT_ARGS sc=SparkContext('local[*]','testSparkContext') sqlContext=sqlContext(sc) t0=时间。时间() database_ur

我正在尝试使用PySpark和SQLAlchamy读取数据库表,如下所示:

SUBMIT_ARGS=“--jars mysql-connector-java-5.1.45-bin.jar pyspark shell”
os.environ[“PYSPARK_SUBMIT_ARGS”]=SUBMIT_ARGS
sc=SparkContext('local[*]','testSparkContext')
sqlContext=sqlContext(sc)
t0=时间。时间()
database_uri='jdbc:mysql://{}:3306/{}'。格式(“127.0.0.1”,)
dataframe\u mysql=sqlContext.read.format(“jdbc”).options(url=database\u uri,driver=“com.mysql.jdbc.driver”,dbtable=,user=,password=).load()
打印(dataframe_mysql.rdd.map(lambda行:list(row)).collect())
t1=时间。时间()
数据库2='mysql://{}:{}@{}/{}'。格式(,,“127.0.0.1,,)
引擎=创建引擎(数据库2)
连接=引擎。连接()
s=文本(“从{}.{}中选择*格式(,))
结果=连接。执行
对于每个结果:
打印(每个)
t2=时间。时间()
打印(“PySpark所用的时间:,(t1-t0))
打印(“SQLAlchamy花费的时间”(t2-t1))
这是获取大约3100行所需的时间:

Time taken by PySpark: 12.326745986938477
Time taken by SQLAlchamy: 0.21664714813232422
为什么SQLAlchamy的表现优于PySpark?有没有办法让这更快?我的方法有错误吗

为什么SQLAlchamy的表现优于PySpark?有没有办法让这更快?我的方法有错误吗

不止一个。最终,您尝试以一种不打算使用的方式使用Spark,测量不正确的东西,并引入难以置信的间接量。总体而言:

  • JDBC
    DataSource
    效率低下,而且在使用时完全是顺序的。登记Spark Gotchas
  • 收集数据并非用于实际生产
  • 通过将数据转换为RDD并序列化、提取到驱动程序和反序列化,您引入了很多间接寻址
  • 您的代码不仅度量数据处理时间,还度量集群/上下文初始化时间
  • local
    模式(为原型设计和单元测试而设计)只是顶部的一颗樱桃
  • 等等

所以在一天结束时,您的代码是缓慢的,但它不是您在生产应用程序中使用的东西。SQLAlchemy和Spark是为完全不同的目的而设计的-如果您正在寻找低延迟数据库访问层,Spark不是正确的选择。

Hi@用户9579544,为了便于读取数据,我添加了一些配置,如
partitionColumn
上限
下限
,以及
numofPartitions
,但仍然没有更改。另外,
collect()
的生产级替代方案是什么?@gourxb Spark是一个并行计算框架。你有大量的数据要转换你计算结果,你把它写进db/file/nosql。。。然后使用可视化工具来存储结果