จำกัด(n)กับแสดง(n)การแสดงความแตกต่างใน Pyspark

0

คำถาม

พยายามที่จะเข้าใจลึกความเข้าใจของออลสปาร์คทำงานและกำลังเล่นอยู่กับ pyspark cli(2.4.0). ฉันกำลังมองหาความแตกต่างระหว่างการใช้ limit(n).show() แล้ว show(n). ฉันต้องจบลงด้วสองคนแตกต่างจากเดิมมากนักการแสดงครั้งสำหรับสองคนมากคล้ายกันค้นข้อมูล. ด้านล่างนี้เป็นคำสั่งของฉันหนีแต่คุณยังมีพ่อ ที่ parquet แฟ้มที่ถูกอ้างอิงในการหัสทางด้านล่างมีเรื่อง 50 คอลัมน์และจบลง 50gb ในขนาดของแฟ้มบนทางไกล HDFS.

# Create dataframe
>>> df = sqlContext.read.parquet('hdfs://hdfs.host/path/to.parquet') ↵

# Create test1 dataframe
>>> test1 = df.select('test_col') ↵
>>> test1.schema ↵
StructType(List(StructField(test_col,ArrayType(LongType,true),true)))
>>> test1.explain() ↵
== Physical Plan ==
*(1) Project [test_col#40]
+- *(1) FileScan parquet [test_col#40]
    Batched: false,
    Format: Parquet,
    Location: InMemoryFileIndex[hdfs://hdfs.host/path/to.parquet],
    PartitionCount: 25,
    PartitionFilters: [],
    PushedFilters: [],
    ReadSchema: struct<test_col:array<bigint>>

# Create test2 dataframe
>>> test2 = df.select('test_col').limit(5) ↵
>>> test2.schema ↵
StructType(List(StructField(test_col,ArrayType(LongType,true),true)))
>>> test2.explain() ↵
== Physical Plan ==
CollectLimit 5
+- *(1) Project [test_col#40]
   +- *(1) FileScan parquet [test_col#40]
     Batched: false,
     Format: Parquet,
     Location: InMemoryFileIndex[hdfs://hdfs.host/path/to.parquet],
     PartitionCount: 25,
     PartitionFilters: [],
     PushedFilters: [],
     ReadSchema: struct<test_col:array<bigint>>

สังเกตว่างทางร่างกายวางแผนมันเกือบจะเหมือนกันสำหรับทั้งสอง test1 แล้ว test2. มีข้อยกเว้นอยู่ test2 เป็นแผนขอเริ่มด้วย"CollectLimit 5". หลังจากการตั้งค่านี้ขึ้นมาฉันหนี test1.show(5) แล้ว test2.show(5). ทดสอบ 1 กลับหาผล instantaneously. ทดสอบ 2 แสดงความคืบหน้าบาร์กับ 2010 งานและเรื่องเมื่อ 20 นาทีที่สมบูรณ์(ฉันมีหนึ่ง executor)

คำถาม ทำไมถึงทดสอบ 2(กับการจำกัด)แสดงแล้วแย่มากเมื่อเทียบกับเพื่อทดสอบ 1(ไม่จำกัด)? ครูปแบบแถบกำกับแกน y และถูกตั้งค่าเป็นเหมือนกันและที่นั่นแผนของพวกเธอคงต้องเกือบเหมือนกันเป๊ะ

2

คำตอบที่ดีที่สุด

1

ไว้:

  • show() คือชื่อปลอมสำหรับ show(20) และ relies อยู่ภายในร่างกาย take(n: Int): Array[T]
  • limit(n: Int) กลับมาอีกวันที่และเป็นที่แพงมาปฏิบัติการที่อ่านตลอดแหล่งข่าว
2021-11-23 20:59:09
0

จำกัด-ถูกใหม่ dataframe และใช้เวลานานกเวลาเพราะว่านี่เป็นเพราะ predicate pushdown คือตอนนี้ไม่รองรับในข้อมูลของคุณรูปแบบแฟ้ม จึงอ่านทั้งวันที่และกำลังปรับใช้รีสวัสดิ์สเปนเซอร์

2021-11-24 02:21:07

มันดังนั้นนั่นหมายถึงสองคนทดสอบจะมีมากกว่าที่คล้ายกับการแสดว่าอ่านจากเหมือน MySQL แทนที่จะเป็น HDFS?
cyclobster

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่