คำถามติดแท็ก pyspark

Spark Python API (PySpark) แสดงโมเดลการเขียนโปรแกรม apache-spark ให้กับ Python

13
วิธีการเปลี่ยนชื่อคอลัมน์ข้อมูลใน pyspark?
ฉันมาจากพื้นหลังของ pandas และฉันคุ้นเคยกับการอ่านข้อมูลจากไฟล์ CSV เป็น dataframe แล้วก็เปลี่ยนชื่อคอลัมน์เป็นสิ่งที่มีประโยชน์โดยใช้คำสั่งง่าย ๆ : df.columns = new_column_name_list อย่างไรก็ตามเดียวกันไม่สามารถใช้งานได้ใน pyspark dataframes ที่สร้างขึ้นโดยใช้ sqlContext ทางออกเดียวที่ฉันสามารถคิดให้ทำได้ง่าย ๆ คือ: df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt") oldSchema = df.schema for i,k in enumerate(oldSchema.fields): k.name = new_column_name_list[i] df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema) นี่คือการกำหนดตัวแปรโดยทั่วไปสองครั้งและอนุมานสคีมาก่อนจากนั้นเปลี่ยนชื่อชื่อคอลัมน์แล้วโหลดดาต้าเฟรมอีกครั้งด้วยสคีมาที่อัปเดต มีวิธีที่ดีกว่าและมีประสิทธิภาพมากกว่าในการทำเช่นนี้ในแพนด้าหรือไม่? เวอร์ชั่น Spark ของฉันคือ 1.5.0

2
ประสิทธิภาพการจุดประกายสำหรับ Scala vs Python
ฉันชอบ Python มากกว่า Scala แต่เนื่องจาก Spark เขียนขึ้นโดยกำเนิดในภาษา Scala ฉันคาดว่ารหัสของฉันจะทำงานได้เร็วขึ้นใน Scala มากกว่ารุ่น Python ด้วยเหตุผลที่ชัดเจน ด้วยสมมติฐานดังกล่าวฉันคิดว่าเรียนรู้และเขียนรุ่น Scala ของโค้ด preprocessing ที่ใช้กันทั่วไปสำหรับข้อมูล 1 GB บางส่วน ข้อมูลจะถูกหยิบมาจากการแข่งขันใน Springleaf Kaggle เพียงเพื่อให้ภาพรวมของข้อมูล (มันมีขนาด 1,936 และ 145232 แถว) ข้อมูลประกอบด้วยประเภทต่างๆเช่น int, float, string, boolean ฉันใช้ 6 คอร์จาก 8 สำหรับการประมวลผล Spark; นั่นเป็นเหตุผลที่ฉันใช้minPartitions=6เพื่อให้ทุกแกนมีบางอย่างที่ต้องดำเนินการ รหัสสกาล่า val input = sc.textFile("train.csv", minPartitions=6) val input2 …

15
จะปิดการบันทึกข้อมูลใน Spark ได้อย่างไร?
ฉันติดตั้ง Spark โดยใช้คู่มือ AWS EC2 และฉันสามารถเปิดใช้งานโปรแกรมได้อย่างดีโดยใช้bin/pysparkสคริปต์เพื่อไปที่จุดประกายประกายและยังสามารถทำ Quide Quick Start ได้สำเร็จ อย่างไรก็ตามฉันไม่สามารถใช้ชีวิตของฉันหาวิธีหยุดการบันทึก verbose ทั้งหมดINFOหลังจากแต่ละคำสั่ง ฉันได้ลองเกือบทุกสถานการณ์ที่เป็นไปได้ในรหัสด้านล่าง (ความเห็นออกการตั้งค่าปิด) ภายในlog4j.propertiesไฟล์ของฉันในconfโฟลเดอร์ที่ฉันเปิดแอปพลิเคชันจากเช่นเดียวกับในแต่ละโหนดและไม่มีอะไรทำอะไรเลย ฉันยังคงได้รับINFOข้อความสั่งพิมพ์หลังจากดำเนินการแต่ละคำสั่ง ฉันสับสนมากเกี่ยวกับวิธีการทำงานนี้ #Set everything to be logged to the console log4j.rootCategory=INFO, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n # Settings to quiet third party logs that are too verbose log4j.logger.org.eclipse.jetty=WARN log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO …

2
จะเพิ่มคอลัมน์ค่าคงที่ใน Spark DataFrame ได้อย่างไร
ฉันต้องการเพิ่มคอลัมน์ใน a DataFrameโดยมีค่าตามอำเภอใจ (ซึ่งเหมือนกันสำหรับแต่ละแถว) ฉันได้รับข้อผิดพลาดเมื่อใช้withColumnดังนี้: dt.withColumn('new_column', 10).head(5) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-50-a6d0257ca2be> in <module>() 1 dt = (messages 2 .select(messages.fromuserid, messages.messagetype, floor(messages.datetime/(1000*60*5)).alias("dt"))) ----> 3 dt.withColumn('new_column', 10).head(5) /Users/evanzamir/spark-1.4.1/python/pyspark/sql/dataframe.pyc in withColumn(self, colName, col) 1166 [Row(age=2, name=u'Alice', age2=4), Row(age=5, name=u'Bob', age2=7)] 1167 """ -> 1168 return self.select('*', col.alias(colName)) 1169 1170 …

9
ฉันจะเพิ่มคอลัมน์ใหม่ใน Spark DataFrame (โดยใช้ PySpark) ได้อย่างไร
ฉันมี Spark DataFrame (ใช้ PySpark 1.5.1) และต้องการเพิ่มคอลัมน์ใหม่ ฉันได้ลองทำสิ่งต่อไปนี้แล้ว แต่ไม่ประสบความสำเร็จ: type(randomed_hours) # => list # Create in Python and transform to RDD new_col = pd.DataFrame(randomed_hours, columns=['new_col']) spark_new_col = sqlContext.createDataFrame(new_col) my_df_spark.withColumn("hours", spark_new_col["new_col"]) ยังได้รับข้อผิดพลาดในการใช้สิ่งนี้: my_df_spark.withColumn("hours", sc.parallelize(randomed_hours)) ดังนั้นฉันจะเพิ่มคอลัมน์ใหม่ (ตาม Python vector) ไปยัง DataFrame ที่มีอยู่ด้วย PySpark ได้อย่างไร

19
นำเข้า pyspark ใน python shell
นี่เป็นสำเนาคำถามของคนอื่นในฟอรัมอื่นที่ไม่เคยมีคำตอบฉันจึงคิดว่าจะถามที่นี่ซ้ำเพราะฉันมีปัญหาเดียวกัน (ดูhttp://geekple.com/blogs/feeds/Xgzu7/posts/351703064084736 ) ฉันติดตั้ง Spark อย่างถูกต้องบนเครื่องของฉันและสามารถเรียกใช้โปรแกรม python ด้วยโมดูล pyspark ได้โดยไม่มีข้อผิดพลาดเมื่อใช้. /bin/pyspark เป็นล่ามหลามของฉัน อย่างไรก็ตามเมื่อฉันพยายามเรียกใช้ Python shell ปกติเมื่อฉันพยายามนำเข้าโมดูล pyspark ฉันได้รับข้อผิดพลาดนี้: from pyspark import SparkContext และมันบอกว่า "No module named pyspark". ฉันจะแก้ไขปัญหานี้ได้อย่างไร? มีตัวแปรสภาพแวดล้อมที่ฉันต้องตั้งให้ชี้ Python ไปที่ส่วนหัว / ไลบรารี pyspark / ฯลฯ หรือไม่ หากการติดตั้ง spark ของฉันคือ / spark / ฉันต้องรวมเส้นทาง pyspark ไว้ด้วย? หรือโปรแกรม pyspark สามารถเรียกใช้จากล่าม pyspark …

12
โหลดไฟล์ CSV ด้วย Spark
ฉันเพิ่งเริ่มใช้ Spark และฉันกำลังพยายามอ่านข้อมูล CSV จากไฟล์ด้วย Spark นี่คือสิ่งที่ฉันกำลังทำ: sc.textFile('file.csv') .map(lambda line: (line.split(',')[0], line.split(',')[1])) .collect() ฉันคาดว่าการโทรนี้จะให้รายการสองคอลัมน์แรกของไฟล์ของฉัน แต่ฉันได้รับข้อผิดพลาดนี้: File "<ipython-input-60-73ea98550983>", line 1, in <lambda> IndexError: list index out of range แม้ว่าไฟล์ CSV ของฉันจะมีมากกว่าหนึ่งคอลัมน์

9
แปลงคอลัมน์ Spark DataFrame เป็นรายการ python
ฉันทำงานกับ dataframe ที่มีสองคอลัมน์ mvv และ count +---+-----+ |mvv|count| +---+-----+ | 1 | 5 | | 2 | 9 | | 3 | 3 | | 4 | 1 | ฉันต้องการได้รับสองรายการที่มีค่า mvv และค่าการนับ สิ่งที่ต้องการ mvv = [1,2,3,4] count = [5,9,3,1] ดังนั้นฉันลองใช้รหัสต่อไปนี้: บรรทัดแรกควรส่งคืนรายการไพ ธ อนของแถว ฉันต้องการเห็นค่าแรก: mvv_list = mvv_count_df.select('mvv').collect() firstvalue = mvv_list[0].getInt(0) …

5
โปรแกรม Spark Kill Running
ฉันมีแอปพลิเคชัน Spark ที่ใช้งานอยู่ซึ่งมันครอบครองแกนทั้งหมดโดยที่แอปพลิเคชันอื่น ๆ ของฉันจะไม่ได้รับการจัดสรรทรัพยากรใด ๆ ฉันทำการวิจัยอย่างรวดเร็วและมีคนแนะนำให้ใช้ YARN kill หรือ / bin / spark-class เพื่อฆ่าคำสั่ง อย่างไรก็ตามฉันใช้เวอร์ชัน CDH และ / bin / spark-class ไม่มีอยู่เลยแอปพลิเคชัน YARN kill ก็ไม่ทำงานเช่นกัน ใครสามารถกับฉันด้วยสิ่งนี้?

10
กรองคอลัมน์ดาต้าเฟรมของ Pyspark ด้วยค่าไม่มี
ฉันกำลังพยายามกรองดาต้าเฟรม PySpark ที่มีNoneค่าเป็นแถว: df.select('dt_mvmt').distinct().collect() [Row(dt_mvmt=u'2016-03-27'), Row(dt_mvmt=u'2016-03-28'), Row(dt_mvmt=u'2016-03-29'), Row(dt_mvmt=None), Row(dt_mvmt=u'2016-03-30'), Row(dt_mvmt=u'2016-03-31')] และฉันสามารถกรองได้อย่างถูกต้องด้วยค่าสตริง: df[df.dt_mvmt == '2016-03-31'] # some results here แต่สิ่งนี้ล้มเหลว: df[df.dt_mvmt == None].count() 0 df[df.dt_mvmt != None].count() 0 แต่มีค่าแน่นอนในแต่ละประเภท เกิดอะไรขึ้น?

5
วิธีเปลี่ยนคอลัมน์ Dataframe จาก String type เป็น Double type ใน pyspark
ฉันมี dataframe ที่มีคอลัมน์เป็น String ฉันต้องการเปลี่ยนประเภทคอลัมน์เป็นประเภท Double ใน PySpark ต่อไปนี้เป็นวิธีที่ฉันทำ: toDoublefunc = UserDefinedFunction(lambda x: x,DoubleType()) changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show'])) แค่อยากรู้ว่านี่เป็นวิธีที่ถูกต้องหรือไม่ในขณะที่ทำงานผ่าน Logistic Regression ฉันได้รับข้อผิดพลาดบางอย่างดังนั้นฉันจึงสงสัยว่านี่เป็นสาเหตุของปัญหาหรือไม่

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'

18
ฉันจะตั้งค่าเวอร์ชันหลามของไดรเวอร์เป็นประกายไฟได้อย่างไร
ฉันใช้ spark 1.4.0-rc2 ดังนั้นฉันจึงสามารถใช้ python 3 กับ spark ได้ หากฉันเพิ่มลงexport PYSPARK_PYTHON=python3ในไฟล์. bashrc ของฉันฉันสามารถเรียกใช้ spark แบบโต้ตอบกับ python 3 ได้อย่างไรก็ตามหากฉันต้องการเรียกใช้โปรแกรมแบบสแตนด์อโลนในโหมดโลคัลฉันได้รับข้อผิดพลาด: Exception: Python in worker has different version 3.4 than that in driver 2.7, PySpark cannot run with different minor versions ฉันจะระบุเวอร์ชันของ python สำหรับไดรเวอร์ได้อย่างไร การตั้งค่าexport PYSPARK_DRIVER_PYTHON=python3ไม่ทำงาน

2
Spark: ทำไมงูใหญ่ถึงมีประสิทธิภาพเหนือกว่า Scala ในกรณีที่ใช้งานของฉัน?
เพื่อเปรียบเทียบประสิทธิภาพของ Spark เมื่อใช้ Python และ Scala ฉันสร้างงานเดียวกันทั้งสองภาษาและเปรียบเทียบรันไทม์ ฉันคาดว่างานทั้งสองจะใช้เวลาเท่ากัน แต่งาน Python ใช้เวลาเท่านั้น27minในขณะที่งาน Scala ใช้เวลา37min(เกือบ 40% อีกต่อไป!) ฉันใช้งานเดียวกันใน Java เช่นกันและก็ใช้37minutesด้วย วิธีนี้เป็นไปได้อย่างไรที่ Python เร็วขึ้นมาก? ตัวอย่างที่ตรวจสอบได้น้อยที่สุด: งาน Python: # Configuration conf = pyspark.SparkConf() conf.set("spark.hadoop.fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider") conf.set("spark.executor.instances", "4") conf.set("spark.executor.cores", "8") sc = pyspark.SparkContext(conf=conf) # 960 Files from a public dataset in 2 batches input_files = …

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 ช่วยให้กระบวนการเร็วขึ้นหรือไม่ บนเฉลี่ย …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.