คำถามติดแท็ก apache-spark-sql

Apache Spark SQL เป็นเครื่องมือสำหรับ "SQL และการประมวลผลข้อมูลที่มีโครงสร้าง" บน Spark ซึ่งเป็นระบบประมวลผลคลัสเตอร์ที่รวดเร็วและใช้งานทั่วไป สามารถใช้เพื่อดึงข้อมูลจาก Hive, Parquet เป็นต้นและเรียกใช้การสืบค้น SQL ผ่าน RDD และชุดข้อมูลที่มีอยู่

5
Spark DataFrame group โดยและเรียงลำดับจากมากไปหาน้อย (pyspark)
ฉันใช้ pyspark (Python 2.7.9 / Spark 1.3.1) และมี dataframe GroupObject ซึ่งฉันต้องการกรองและเรียงลำดับจากมากไปหาน้อย พยายามที่จะบรรลุผ่านโค้ดชิ้นนี้ group_by_dataframe.count().filter("`count` >= 10").sort('count', ascending=False) แต่มันแสดงข้อผิดพลาดต่อไปนี้ sort() got an unexpected keyword argument 'ascending'

10
แยกค่าคอลัมน์ของ Dataframe เป็น List ใน Apache Spark
ฉันต้องการแปลงคอลัมน์สตริงของกรอบข้อมูลเป็นรายการ สิ่งที่ฉันสามารถหาได้จากDataframeAPI คือ RDD ดังนั้นฉันจึงลองแปลงกลับเป็น RDD ก่อนจากนั้นจึงใช้toArrayฟังก์ชันกับ RDD ในกรณีนี้ความยาวและ SQL ทำงานได้ดี อย่างไรก็ตามผลที่ผมได้จาก RDD [A00001]มีวงเล็บรอบองค์ประกอบเช่นนี้ทุก ฉันสงสัยว่ามีวิธีที่เหมาะสมในการแปลงคอลัมน์เป็นรายการหรือวิธีลบวงเล็บเหลี่ยม ข้อเสนอแนะใด ๆ จะได้รับการชื่นชม ขอขอบคุณ!

11
จะบันทึก DataFrame ลงใน Hive ได้อย่างไร?
เป็นไปได้ไหมที่จะบันทึกเป็นDataFrameประกายโดยตรงไปยัง Hive? ฉันได้ลองแปลงDataFrameเป็นRddแล้วบันทึกเป็นไฟล์ข้อความจากนั้นโหลดในกลุ่ม แต่ฉันสงสัยว่าฉันสามารถบันทึกdataframeลงในรังได้โดยตรงหรือไม่

1
การเขียนมากกว่า 50 ล้านจาก Pyspark df ไปยัง PostgresSQL ซึ่งเป็นวิธีการที่มีประสิทธิภาพที่สุด
อะไรจะเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการแทรกเรคคอร์ดนับล้านบันทึกว่า 50 ล้านจาก Spark dataframe ไปยัง Postgres Tables ฉันได้ทำสิ่งนี้ตั้งแต่ประกายไปจนถึง MSSQL ในอดีตโดยใช้ประโยชน์จากการคัดลอกจำนวนมากและตัวเลือกขนาดแบทช์ซึ่งก็ประสบความสำเร็จเช่นกัน มีบางอย่างที่คล้ายกันที่สามารถอยู่ที่นี่สำหรับ Postgres ได้หรือไม่ เพิ่มรหัสฉันได้ลองและเวลาที่ใช้ในการเรียกใช้กระบวนการ: def inserter(): start = timer() sql_res.write.format("jdbc").option("numPartitions","5").option("batchsize","200000")\ .option("url", "jdbc:postgresql://xyz.com:5435/abc_db") \ .option("dbtable", "public.full_load").option("user", "root").option("password", "password").save() end = timer() print(timedelta(seconds=end-start)) inserter() ดังนั้นผมจึงไม่ได้วิธีการดังกล่าวข้างต้น 10 ล้านแผ่นและมี 5 เชื่อมต่อแบบขนานตามที่ระบุในnumPartitionsและยังพยายามขนาดชุดของ 200k เวลาทั้งหมดที่ใช้ในกระบวนการคือ0: 14: 05.760926 (สิบสี่นาทีและห้าวินาที) มีวิธีอื่นที่มีประสิทธิภาพซึ่งจะลดเวลาหรือไม่? ขนาดแบทช์ที่มีประสิทธิภาพหรือเหมาะสมที่สุดที่ฉันสามารถใช้ได้คืออะไร การเพิ่มขนาดชุดของฉันจะทำงานเร็วขึ้นหรือไม่ หรือเปิดการเชื่อมต่อที่หลากหลายเช่น> 5 ช่วยให้กระบวนการเร็วขึ้นหรือไม่ บนเฉลี่ย …

1
Spark: UDF ดำเนินการหลายครั้ง
ฉันมีชื่อไฟล์พร้อมรหัสต่อไปนี้: def test(lat: Double, lon: Double) = { println(s"testing ${lat / lon}") Map("one" -> "one", "two" -> "two") } val testUDF = udf(test _) df.withColumn("test", testUDF(col("lat"), col("lon"))) .withColumn("test1", col("test.one")) .withColumn("test2", col("test.two")) ตอนนี้ตรวจสอบล็อกฉันพบว่าสำหรับแต่ละแถว UDF จะถูกดำเนินการ 3 ครั้ง ถ้าฉันเพิ่ม "test3" จากคอลัมน์ "test.three" ดังนั้น UDF จะถูกดำเนินการอีกครั้ง มีคนอธิบายได้ไหมทำไม สามารถหลีกเลี่ยงสิ่งนี้ได้อย่างถูกต้องหรือไม่ (โดยไม่ต้องแคชข้อมูลหลังจากที่เพิ่ม "test" แม้ว่าจะใช้งานได้)?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.