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="jdbc",
	driver="com.mysql.jdbc.Driver",
	url="jdbc:mysql://<mysql-server>/<database-name>?user=<username>&password=<password>",
	dbtable="<table>")

จากคำสั่งข้างบน 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 เรียบร้อยครับ ^^