หลังจากที่ได้พูดถึงการเก็บข้อมูลเข้า 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 เรียบร้อยครับ ^^