ฝึกสร้าง UDF
บางครั้งข้อมูลต้องผ่านการแปลงที่ฟังก์ชันในตัวไม่รองรับ นี่คือจุดที่ฟังก์ชันที่ผู้ใช้กำหนดเอง ("UDF") เข้ามามีบทบาท
ฟังก์ชัน SQL udf พร้อมใช้งานแล้ว
มี dataframe df2 ที่มีประเภทเป็น DataFrame[doc: array<string>, in: array<string>, out: array<string>] คอลัมน์ doc ของ dataframe นี้มีโทเค็นอย่างง่าย
โค้ดต่อไปนี้แสดง 20 แถวแรกของ df2 ที่ doc มีค่า '1':
df2.where(array_contains('doc','1')).show()
มีเป้าหมาย 2 ข้อที่ต้องทำให้สำเร็จ:
- ตรวจสอบให้แน่ใจว่าข้อมูลที่ผ่านการแปลงแล้วประกอบด้วยเวกเตอร์ที่ไม่ว่างเปล่า
- dataframe มีคอลัมน์ที่เก็บอาร์เรย์ของ string โดยแต่ละอาร์เรย์มีสมาชิกเพียงหนึ่งตัว และต้องการแปลงคอลัมน์นี้ให้เป็น string
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Introduction to Spark SQL in Python
คำแนะนำการฝึกหัด
- สร้าง udf ที่คืนค่า true ก็ต่อเมื่อค่านั้นเป็นเวกเตอร์ที่ไม่ว่างเปล่าเท่านั้น โดยใช้
numNonzeros() - สร้าง udf ที่ดึงสมาชิกตัวแรกของอาร์เรย์และคืนค่าเป็น string
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Returns true if the value is a nonempty vector
nonempty_udf = udf(lambda x:
True if (x and hasattr(x, "toArray") and x.____())
else False, ____())
# Returns first element of the array as string
s_udf = udf(lambda x: ____(x[0]) if (x and type(x) is list and len(x) > 0)
else '', ____())