สวัสดีครับ มีเรื่องมารบกวนสอบถามครับ
Pipeline situation:
Azure Blob => Azure Databricks => Azure SQL Server
…ไม่แน่ใจว่าเราสามารถใช้ Databricks ต่อ JDBC connection เพื่ออ่าน data จาก blob แล้วเขียนลงใน Azure SQL Server ได้ไหมครับ หรือถ้าในสถานการณ์นี้สามาถทำแบบไหนได้บ้างครับ
ขอบคุณล่วงหน้าครับ
ทำตามนี้เลย: Apache Spark connector for SQL Server - Spark connector for SQL Server | Microsoft Docs
อย่าลืมใส่ jar file ก่อนนะ
azure databricks มันก็คือ spark, จะคุยกะ database ก็ต้องใช้ jdbc driver, ซึ่ง azure sql server จริงๆ แล้วไส้ในมันคือ sql server
ทีนี้ ไม่แน่ใจว่าคุณใช้ databricks ยังไง แต่ถ้าใช้ pyspark, ใช้ jdbc ได้
แต่ถ้าใช้ pure python, อันนี้ต้องไปลง python library เพิ่มนอกรอบเอาเอง มันคุยกันคนละท่า
2 Likes
ขอบคุณมากครับ
ขอโทษทีตอบกลับช้าครับ ตอนนี้สามารถต่อกับ sql server ได้แล้วครับ สามารถเขียน data กลับลงไปที่ sql server ได้แล้ว แต่ติดเรื่อง datatype ของ pyspark กับ spark sql ที่เหมือนจะต่างกันอยู่ครับ
ตอนนี้ใช้วิธีเขียน pyspark ต่อ sql server ด้วย jdbc ตามด้านล่างครับ
โดยกำหนด datatype ตามนี้ครับ PySpark StructType & StructField Explained with Examples - Spark by {Examples}
columns = [“language”,“users_count”]
data = [(“Java”, “20000”), (“Python”, “100000”), (“Scala”, “3000”)]
df = spark.createDataFrame(data).toDF(*columns)
df.write.format(‘jdbc’).option(‘url’, url).option(‘user’, username).option(‘password’, password).option(‘table’, tablename).option(‘driver’, driver)
ถ้าจะเปลี่ยนไปใช้ sql จะสามารถคุย sql server ด้วย jdbc แล้วเขียน data กลับเข้าไปแบบ pyspark ข้างบนได้อย่างไงบ้างครับ ลองดูจาก docs แล้วก็ยังหาตัวอย่างไม่เจอครับ
ตัดเรื่อง terminology ไปก่อน กันงง
spark เนี่ย มันคุยได้หลายท่า ถ้าใช้ python จะเรียกว่า pyspark
pyspark เอง สามารถใช้ได้สองแบบ:
1: spark sql → df.withColumn("col_name", df["col_name"].cast(IntegerType()))
2: sql
df.createOrReplaceTempView("listing")
boundary.createOrReplaceTempView("boundary")
listing_w_province = spark.sql(
"""
SELECT l.listing_id, l.latitude, l.longitude, b.province
FROM listing as l, boundary as b
WHERE l.latitude IS NOT NULL
AND l.longitude IS NOT NULL
AND ST_Intersects(ST_Point(l.longitude, l.latitude), ST_GeomFromWKT(geometry))
"""
)
ถามว่า จะเขียนดาต้าไปที่ sql server ยังไง ก็ต้อง:
- อ่าน raw data ที่อยู่ใน blob storage → จะได้ spark dataframe มาตัวนึง ซึ่งตรงนี้ ถ้าไม่มีอะไรแปลกๆ ก็น่าจะ infer datatype ให้เองแล้ว
-
df.write()
ลงไปที่ sql server
edit: fix typo
2 Likes
ขอบคุณมากครับ ตอนนี้พอเข้าใจแล้วครับ ไปอ่าน docs เพิ่มเติมมา เดี๋ยวลองไปทำดูก่อน อาจจะมีมาถามเพิ่มเติมนะครับ ขอบคุณครับ