Apache Spark (Python) ดึงข้อมูลจากฐานข้อมูล MySQL

หลังจากที่ได้พูดถึงการเก็บข้อมูลเข้า Elasticsearch ด้วย Apache Spark แล้ว วันนี้มาดูวิธีดึงข้อมูลจาก Relational Database อย่าง MySQL กันบ้าง ซึ่งปกติแล้ว Spark จะดึงข้อมูลทั้งหมดที่อยู่ใน table ออกมาให้เลย แต่ก็มีเทคนิคที่จะดึงข้อมูลจากเงื่อนไขที่เราต้องการได้เหมือนกัน ^^

ก่อนอื่นก็สร้าง SQLContext จาก SparkContext ก่อน

sql_context = SQLContext(spark_context)

แล้วก็เรียกใช้ฟังก์ชัน load ของ SQLContext

sql_context.load(resource=&quot;jdbc&quot;,<br />
	driver=&quot;com.mysql.jdbc.Driver&quot;,<br />
	url=&quot;jdbc:mysql://&lt;mysql-server&gt;/&lt;database-name&gt;?user=&lt;username&gt;&amp;password=&lt;password&gt;&quot;,<br />
	dbtable=&quot;&lt;table&gt;&quot;)

จากคำสั่งข้างบน Spark จะดึงข้อมูลทั้งหมดของ

ออกมา (select * from) แต่ถ้าเราอยากได้ข้อมูลตามเงื่อนไขของเราก็สามารถใส่ subquery แทนได้ เช่นอยากได้ข้อมูลของลูกค้าที่มี id น้อยกว่า 1000 ก็ให้เปลี่ยนค่าของ dbtable เป็น

(select * from user where id < 1000) as my_user

จากนั้นในขั้นตอน spark-submit ก็ให้ระบุ mysql-connector เข้าไปด้วยครับ

bin/spark-submit ... --jars path/to/mysql-connector-java-5.0.8-bin.jar

Apache Spark ดึงข้อมูลจาก MySQL เรียบร้อยครับ ^^