我已经完成了一个有关如何直接使用Apache Spark与RDBMS [MySQL]进行交互的POC。我可以使用以下代码从spark-shell与MySQL数据库进行交互:
>>> empDF = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/SPARKPOC").option("dbtable", "SPARKPOC.EMP").option("user", "myuser").option("password", "mypassword").option("driver", "com.mysql.jdbc.Driver").load()
>>> empDF.printSchema()
root
|-- EMPNO: integer (nullable = true)
|-- ENAME: string (nullable = true)
|-- JOB: string (nullable = true)
|-- MANAGERID: integer (nullable = true)
|-- SALARY: double (nullable = true)
|-- PHONE: long (nullable = true)
|-- DEPTNO: integer (nullable = true)
>>> empDF.show()
18/08/27 22:16:47 WARN SizeEstimator: Failed to check whether UseCompressedOops is set; assuming yes
+-----+----------+---------+---------+------+-----------+------+
|EMPNO| ENAME| JOB|MANAGERID|SALARY| PHONE|DEPTNO|
+-----+----------+---------+---------+------+-----------+------+
| 7369| SMITA| CLERK| 7902| 800.0| 9567342250| 20|
| 7499| ANKUR| SALESMAN| 7698|1600.0|95673422300| 30|
| 7521| VIJAY| SALESMAN| 7698|1250.0|95673422500| 30|
| 7566| AJAY| MANAGER| 7839|2975.0| null| 20|
同样,我还能够使用Apache Spark执行查询并从MySQL获取所需的结果。
我正在寻找有关以下内容的更多信息:
spark是否可以一次从RDBMS读取数据,将其存储在内存中,然后进行处理?
如果Apache Spark从MySQL读取数据之间的连接失败,该怎么办?如果两者之间的某些网络连接完全失败,Spark会从头开始启动该过程,还是我重新运行整个作业?
任何快速参考将不胜感激。
关于, 布普什
答案 0 :(得分:1)
在从任何rdbms读取数据时产生火花,从而与服务器建立并行连接,并且并行会话的数量取决于以下参数
numPartitions PartitionColumn-它应该是一个数字列 下界 upperBound
将从rdbms并行读取数据,并且一次可以控制多少条记录可以被
控制fetchsize参数
始终建议将您各自的查询推送到数据库,并让数据库处理优化,而不是直接在dbtable选项中提供表名。
如果连接失败,则无需重新运行作业。 Spark将重试连接并读取数据