Monday 17 July 2017

คำนวณ ง่าย เคลื่อนไหว เฉลี่ย จาวา


ภายในของคุณสำหรับ iterating อาร์เรย์ทั้งหมดเพื่อ thats ทำไมคุณมักจะได้รับค่าเฉลี่ยเดียวกัน (หนึ่งสำหรับอาร์เรย์ทั้งหมด) คุณควร iterate จาก 0 ถึงปัจจุบันจำนวนนอกแทน. ค่าเฉลี่ยเคลื่อนที่ของคุณกำลังได้รับการอัปเดตตามค่า j ภายในของคุณซึ่งหมายความว่าจะแทนที่ค่าก่อนหน้านี้ทุกลูปใหม่ซึ่งควรอยู่ภายในภายนอกแทนที่จะใช้ค่า i เป็นดัชนีด้านใน คุณกำลังหาร sumj เพื่อคำนวณค่าเฉลี่ยทุกวงรอบใหม่ j คุณจะหารด้วย 0 ผลรวมครั้งแรก ฉันเชื่อว่าคุณหมายถึงการใช้ j1 แทนดัชนีไม่เหมือนกับความยาวปัจจุบันเคล็ดลับในการแก้ปัญหา: หลีกเลี่ยงการใช้ตัวแปรในอาร์เรย์ของอาร์เรย์คุณควรใช้ array. length แทน สำหรับเรื่องของการทำซ้ำปัญหาของคุณคุณสามารถให้เราแยกปัญหาแทนรหัสปัจจุบันของคุณ ลองนึกภาพดูว่าข้อผิดพลาดเกิดขึ้นในปัจจัยการผลิตของคุณอย่างไรเราเชื่อว่าคุณใช้คำตอบเหล่านี้อย่างจริงจัง 4 ต. ค. เวลา 20:54 คุณกำลังวนรอบข้อมูลทั้งหมดทุกครั้ง คุณควรมีสำหรับ (int j (igtaverageLengthi-averageLength2: 0) jlt iaverageLength2 ampamp jltnumDataPoints j) (หรือบางอย่างที่คล้ายกัน) สำหรับค่าเฉลี่ยด้านในสุดของคุณ นอกจากนี้ moveAverageisumj ควรได้รับการปรับเปลี่ยนเพื่อจัดการกับกรณีเมื่อ j มีค่าเป็น 0 โดยเฉพาะอย่างยิ่งควรจะเคลื่อนย้าย AverageisumaverageLength และควรใช้กับสล็อต movingAveragei นอกวงเฉลี่ย ตอบเมื่อวันที่ 4 ต. ค. ที่ 20:42 ครั้งต่อไปให้นำความคิดเห็นเกี่ยวกับงานออกจากคำถามก่อนโพสต์ แต่เนื่องจากคุณดูเหมือนจะยังใหม่อยู่ในนี้ลองนึกถึงวิธีการที่คุณจะต้องผ่านข้อมูลและทำให้มันทำอย่างนั้น คุณควรพยายามตรวจสอบให้แน่ใจว่าแต่ละลูปกำลังหยุดที่จุดที่ถูกต้องและจำไว้ว่าถ้าคุณจะหยุดเมื่อไม่มีตัวเลขมากขึ้น (เช่นเมื่อคุณกำลังทำลูปภายในและคุณจะได้เพียง 3 หมายเลขแทน 4) โปรแกรมต้องหยุดเกินไป ตรวจสอบว่ารหัสของคุณกำลังตรวจสอบ ตอบ 4 ต. ค. ที่ 20:56 หากไม่มีข้อมูลเพิ่มเติมใด ๆ คุณอาจต้องมีค่าเฉลี่ยเคลื่อนที่แบบไม่ถ่วงน้ำหนัก ที่จุดใด Ai ในอาร์เรย์ใส่ A ยาว N (with 0ltiltN) นั่นหมายความว่าค่าเฉลี่ยของรายการ K ก่อนหน้าของอาร์เรย์ถึงและรวมถึง Ai ถ้ามีค่า K เช่นค่าเฉลี่ย (i1) จาก A0 ถึง Ai รวมทั้ง นิด ๆ หน่อย ๆ ของความคิดจะแสดงให้เห็นว่าคุณไม่จำเป็นต้องเพิ่มขึ้นทุกค่า K ทุกครั้ง เพียงเก็บผลรวมและเมื่อย้ายไปยังจุดถัดไป (ซึ่งเป็นค่าเฉลี่ยเคลื่อนที่) ลบค่าที่ถูกแทนที่และเพิ่มค่าใหม่ที่จะแทนที่ (ในช่วงจุดแรกของ K-1 คุณจะเพิ่มมูลค่าใหม่ให้กับผลรวมและเพิ่มจำนวนเคาน์เตอร์ของคุณลง 1) ณ จุดใด ๆ ในกระบวนการนี้ค่าเฉลี่ยเคลื่อนที่คือจำนวนเงินปัจจุบันที่หารด้วยค่าการนับปัจจุบัน ตอบ 4 ต. ค. 52 เวลา 21:05 ค่าเฉลี่ยเคลื่อนที่คุณต้องมีขนาดหน้าต่างอยู่บ้าง ขนาดหน้าต่างของคุณคือ averageLength ดังนั้นจะมีลักษณะดังนี้: ลูปสำหรับเริ่มต้นที่ข้อมูลปัจจุบันและย้อนกลับจุดข้อมูล averageLength และเพิ่มค่าขึ้น คุณจะมีค่าเฉลี่ยเคลื่อนที่เมื่อคุณมีเมื่อมีจุดข้อมูลเพียงพอและค่าเฉลี่ยจะเป็นผลรวมหารด้วยความยาวเฉลี่ย หมายเหตุ: ไม่ได้ทดสอบรหัส sudo เพียง แต่นี่เป็นแนวคิด #: 21430 c # exchange exchange-2007 User: n / a Comments for #: 599792 Stack Exchange, IncJava ค่าเฉลี่ยเคลื่อนที่หากคุณกำลังมองหา EMA ที่เหมาะสำหรับการสตรีมข้อมูลที่มาจากไฟล์หรือบริการ quoting ชั้นตัวอย่างต่อไปนี้จะทำคุณดีเป็น ตรงกันข้ามกับการใช้กำลังคำนวณ brute-force วิธีนี้เป็นประโยชน์อย่างยิ่งหากคุณประมวลผลข้อมูลในแบบเรียลไทม์ EMA ซึ่งเป็นกรณีพิเศษของค่าเฉลี่ยเคลื่อนที่ที่ถ่วงน้ำหนักมีประโยชน์ที่น้ำหนักสัมพัทธ์สำหรับแต่ละช่วงเวลาต่อเนื่องจะลดลงตามค่าคงที่ f 2 (N1) โดยที่ N คือจำนวนรอบระยะเวลาที่จะใช้ EMA สมมติว่าคุณสามารถคำนวณ EMA ปัจจุบัน (เช่นสำหรับรอบระยะเวลาปัจจุบัน) โดยใช้สูตรซ้ำต่อไปนี้: eman fprice (1-f) eman-1 ตัวอย่างคลาสต่อไปนี้ใช้ลักษณะซ้ำของ EMA และลดความต้องการในการคำนวณมากกว่าความสามารถในการประมวลผลแบบเดรัจฉาน - วิธีกำลังหรือวิธีหลังการประมวลผล private int numPeriods 0 private int totalPeriods 0 private double runningEMA 0.0 private double factor 0.0 public EMA (int numPeriods) this. numPeriods numPeriods factor 2.0 (numPeriods 1.0) รีเซ็ตการคำนวณเพื่อสร้าง EMA ในช่วงเวลาที่กำหนด รีเซ็ต void สาธารณะ (int numPeriods) ส่งกลับค่า EMA สำหรับระยะเวลาที่กำหนดระหว่างตัวสร้าง หากช่วงการประมวลผลมีค่าน้อยกว่าช่วง EMA จะส่งกลับค่าเป็นศูนย์ การคำนวณค่าใช้จ่ายของคู่ค้าสาธารณะ (ราคาคู่) การเรียกใช้ MEMA factorprice (1-factor) runningEMA ถ้า (totalPeriods lt numPeriods) จากแหล่งข้อมูลที่คุณให้ข้อมูลราคาและสิ่งที่คุณทำกับผลการค้นหา EMA ขึ้นอยู่กับคุณ ตัวอย่างเช่นหากคุณมีข้อมูลราคาในอาร์เรย์และต้องการคำนวณ EMA ในอาร์เรย์อื่นข้อมูลโค้ดต่อไปนี้จะใช้งานได้: ราคาคู่ แหล่งที่มาจากการคำนวณไฟล์หรือบริการการเสนอราคา double ema doubleprices. length ใหม่ EMA ema ใหม่ EMA (50) ระยะเวลา 50 EMA สำหรับ (int idx0 iltprices. length idx) emaidx ema (pricesidx) โชคดีและความปรารถนาดีที่สุดสำหรับโครงการของคุณ Cloudera Blog วิศวกรรม Simple Moving Average, Secondary Sort, และ MapReduce (Part 3) นี่เป็นส่วนสุดท้ายของบล็อกชุดที่สาม หากต้องการดูส่วนก่อนหน้าของชุดข้อมูลนี้โปรดใช้ลิงก์ต่อไปนี้ก่อนหน้านี้ผมอธิบายวิธีใช้ Excel และ R เป็นเครื่องมือในการวิเคราะห์เพื่อคำนวณ Simple Moving Average ของชุดราคาปิดของหุ้นขนาดเล็ก ในส่วนสุดท้ายนี้จะเป็นส่วนของบล็อกสามชุดฉันจะเจาะลึกโดยใช้ MapReduce เพื่อค้นหา Simple Moving Average ของชุดข้อมูลตัวอย่างเล็ก ๆ ของเรา จากนั้นฉันจะแสดงวิธีการใช้รหัสเดียวกันคุณจะสามารถคำนวณ Simple Moving Average ของทุกราคาหุ้นปิดตั้งแต่ปี 1980 ลงรูกระต่ายด้วย Hadoop ในตัวอย่างข้างต้นเราได้ดูที่การคำนวณค่าเฉลี่ยเคลื่อนที่ที่เรียบง่าย ของข้อมูลที่ค่อนข้างเล็ก สำหรับการวิเคราะห์อย่างมาก excel และ R เป็นเครื่องมือที่มีประสิทธิภาพมาก แต่เมื่อเทียบกับพื้นที่เก็บข้อมูลกิกะไบต์เทราไบต์และ petabyte เราพบปัญหาบางอย่างเกี่ยวกับข้อมูลท้องถิ่นความเร็วของดิสก์และความเร็วในการประมวลผล เพื่อแสดงให้เห็นถึงปัจจัยเหล่านี้ให้ใช้เครื่องที่เป็นตำนานที่มีดิสก์ 1 petabyte เดียวซึ่งทำงานเหมือนกับความเร็วของดิสก์ในปัจจุบัน สำหรับจุดประสงค์ของตัวอย่างนี้ใช้ความเร็วในการอ่าน 40 MB เป็นอย่างดี สมมติว่างานของเราเพื่อสแกนผ่านข้อมูลนี้และสร้างค่าเฉลี่ยเคลื่อนที่แบบง่ายๆตัวประมวลผลจะไม่ขัดขวางการคำนวณและเราสามารถคำนวณการคำนวณการเคลื่อนย้ายหน้าต่างได้ตลอดเวลาโดยใช้ข้อมูลที่มีขนาดเต็ม 40 MB ให้สมมติว่าข้อมูลถูกจัดเรียงไว้ก่อนหน้านี้และเราต้องทำการสแกนตามลำดับเพื่อเพิ่มอัตราการรับส่งข้อมูลจากดิสก์และสามารถส่งมอบ 40 เมกะไบต์ไปยังกระบวนการผลิตได้อย่างสม่ำเสมอ ขึ้นอยู่กับเจฟฟ์ Deans 12 หมายเลขวิศวกรทุกคนควรรู้สไลด์นี้เป็นไปได้ตั้งค่า เมื่อมีการคำนวณนี้การคำนวณค่าเฉลี่ยเคลื่อนที่ 1 ไบต์ต่อวินาทีของเราจะใช้เวลาประมาณ 310 วันจึงจะเสร็จสมบูรณ์ สำหรับสถานการณ์ส่วนใหญ่นี้ค่าใช้จ่ายในการดำเนินงานในแง่ของเวลาทำให้ไม่มีเหตุผลที่จะต้องพิจารณา โชคดีที่กลไกของ HDFS และ MapReduce ลดปัจจัยเหล่านี้ทำให้เราสามารถทำให้ปัญหานี้เป็นเวลาเชิงเส้นและการใช้งานเงินทุนเพื่อช่วยให้เราสามารถตัดสินใจได้ว่าต้องการให้เครื่องจำนวนใดที่เราต้องการใช้ในการสแกนแบบเฉลี่ยเคลื่อนที่ได้อย่างมีประสิทธิภาพ ในตัวอย่างค่าเฉลี่ยเคลื่อนที่ที่กล่าวมาข้างต้นเราละเลยที่จะต้องพิจารณาข้อ จำกัด ของ: การเก็บข้อมูล petabyte ของข้อมูลบนฮาร์ดแวร์ที่ไม่เป็นตำนาน การจัดเรียงข้อมูล petabyte พิจารณาความล้มเหลวของฮาร์ดแวร์ในช่วง 310 วันนับจากวันประมวลผล โดยปกติการใช้งานของชุดข้อมูลในเวลาจำเป็นต้องสแกนข้อมูลในบางจุดซึ่งจะทำให้ภูเขาใหญ่โตขึ้นหากเราต้องการเจาะข้อมูลชุดข้อมูลขนาดใหญ่ในระบบปัจจุบัน เห็นแหล่งข้อมูลข้อมูลหลายเทราไบต์และหลาย petabyte ในโดเมนแบบอนุกรมทุกวันรวมถึงและในแต่ละโดเมนเหล่านี้สถานการณ์ข้างต้นถือเป็นความท้าทายที่แท้จริงในการแก้ไขปัญหา HDFS จะแก้ปัญหาด้านการจัดเก็บและความล้มเหลวข้างต้น แต่สิ่งที่เกี่ยวกับการเรียงลำดับและการประมวลผลการเรียงลำดับข้อมูลจำนวนมากในตัวเองเป็นปัญหาที่ไม่เป็นสาระ แต่สามารถเข้าถึงได้ด้วยเทคนิคบางอย่างใน MapReduce ให้ดูที่โค้ด MapReduce จริงที่เราสามารถดาวน์โหลดเพื่อรวบรวมและผลิตค่าเฉลี่ยเคลื่อนที่ที่ปรับขนาดได้ง่ายของเราเองเพื่อแก้จุดเจ็บปวดเหล่านี้ Simple Moving Average ใน MapReduce โดยปกติโปรแกรม MapReduce จะประกอบด้วยฟังก์ชันสองอย่าง: (คุณคาดเดา) ฟังก์ชันแผนที่และฟังก์ชันลด ในโลกของการเขียนโปรแกรมจาวาเราสร้างคลาสแผนที่และชั้นลดแต่ละคนมีวิธีการสืบทอดที่เป็นประโยชน์สำหรับวัตถุประสงค์ที่เคารพของพวกเขา เราใช้รูปแบบการเขียนโปรแกรม MapReduce เนื่องจากถูกสร้างขึ้นเพื่อบรรเทาปัญหาที่เกิดขึ้นพร้อมกันในอัลกอริทึมของเราและเราได้รับความเท่าเทียมกันที่ปรับขนาดได้ของเราอย่างไม่ลำบาก ฟังก์ชันแผนที่สามารถเกี่ยวข้องกับโค้ดที่ดำเนินการคู่คู่ - ค่าคู่ แต่การดำเนินการเชิงตรรกะหลักคือการจัดกลุ่มข้อมูลตามคีย์ วิธีง่ายๆในการคิดเกี่ยวกับฟังก์ชันแผนที่คือการคิดเป็นข้อมูลเชิงตรรกะของข้อมูลหรือกลุ่มตามข้อ ฟังก์ชั่นลดถูกใช้ในการทำกลุ่มเหล่านี้ (แยกเป็นรายบุคคล) และใช้กระบวนการที่มีค่าซึ่งถูกจัดกลุ่มเข้าด้วยกัน การทำงานร่วมกันในการลดฟังก์ชันต่างๆ ได้แก่ ในตัวอย่างของค่าเฉลี่ยของค่าเฉลี่ยที่เรียบง่ายของเราเราไม่ดำเนินการตามเกณฑ์มูลค่าโดยเฉพาะหรือไม่รวมทั้งค่าทั้งหมด การดำเนินงานของเราในความหมายโดยรวมเกี่ยวข้องกับหน้าต่างบานเลื่อนซึ่งจะดำเนินการตามส่วนย่อยของข้อมูลในแต่ละขั้นตอน นอกจากนี้เรายังต้องพิจารณาว่าคะแนนในข้อมูลชุดข้อมูลของเราจะไม่ได้รับการรับประกันว่าจะมาถึงลำดับที่ลดลงและจำเป็นต้องเรียงลำดับตามที่ระบุในส่วนก่อนหน้านี้ เนื่องจากมีฟังก์ชั่นแผนที่หลายอันอ่านข้อมูลหลาย ๆ ส่วนของข้อมูลต้นฉบับ MapReduce ไม่ได้กำหนดลำดับใด ๆ ของคู่คีย์ - ค่าที่จัดกลุ่มไว้ในพาร์ติชันดีฟอลต์และแผนการจัดเรียง มีสถานการณ์ที่เราได้จัดเรียงข้อมูลที่แบ่งพาร์ติชัน แต่เพื่อประโยชน์ของตัวอย่างนี้จะต้องจัดการกับชุดข้อมูลชุดข้อมูลที่ไม่มีการจัดเรียงตามลำดับความหลากหลายของสวน ให้เวลาผ่านไปครั้งแรกที่เราสามารถออกแบบงานนี้เฉลี่ยเรียบง่ายของ MapReduce เราต้องการจัดกลุ่มของหุ้นทั้งหมดที่มีการปรับค่าใกล้เคียงกันเพื่อให้เราสามารถใช้การดำเนินงานเฉลี่ยแบบเคลื่อนไหวได้ง่ายกว่าข้อมูลชุดข้อมูลเรียงลำดับ เราต้องการปล่อยชุดค่าคีย์ชุดค่าผสมแต่ละชุดไว้ในสัญลักษณ์หุ้นเพื่อจัดกลุ่มค่าเหล่านี้ร่วมกัน ในขั้นตอนการลดเราสามารถเรียกใช้การดำเนินการได้ที่นี่ค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายมากกว่าข้อมูล เนื่องจากข้อมูลมากกว่าจะไม่ถึงลดลงในลำดับเรียงกันต้องจัดเรียงข้อมูลก่อนที่เราจะสามารถคำนวณค่าเฉลี่ยเคลื่อนที่ได้ง่าย วิธีทั่วไปในการจัดเรียงข้อมูลคือการโหลดข้อมูลลงในหน่วยความจำในโครงสร้างข้อมูลเช่นกองซ้อนเช่นเดียวกับวิธีนี้ในโปรแกรม java แบบปกติ ในกรณีนี้ให้ใช้ชั้นจัดลำดับความสำคัญของ Javas เพื่อจัดเรียงข้อมูลของเรา นอกจากนี้เราต้องพิจารณาจำนวนหน่วยความจำที่ใช้โดยข้อมูลชุดข้อมูลเวลาที่เข้ามาในระหว่างการจัดเรียงเนื่องจากเป็นปัจจัย จำกัด สำหรับข้อมูลที่เราสามารถจัดเรียงได้ ในการออกแบบนี้เราต้องโหลดข้อมูลชุดเวลาทั้งหมดก่อนที่เราจะสามารถประมวลผลได้และหากจำนวนข้อมูลที่จะจัดเรียงเกินขนาดฮีปที่มีอยู่เรามีปัญหา ตัวอย่างของการใช้งานนี้จัดเก็บไว้ที่ github: ในการเรียกใช้รหัสนี้ในคลัสเตอร์ Hadoop ของคุณเองให้ดาวน์โหลด CDH จาก Cloudera และตั้งค่าคลัสเตอร์แบบกระจายหลอก 8211 ซึ่งเป็นโหนดเดียวของ Hadoop โหมดกระจายแบบ Pseudo เป็นวิธีที่ดีในการทดลองใช้โค้ดกับ Hadoop ถัดไปดาวน์โหลดและรวบรวมรหัสเฉลี่ยเคลื่อนที่ลงในโถ หากต้องการดาวน์โหลดโค้ดโดยตรงจาก github (ในเชลล์ใน MacOSX หน้าต่าง terminal ssh ใน linux หรือ MINGW32 for win32) we8217ll ใช้คำสั่ง: pass แรกของเราเป็นทางออกที่ดี แต่ถูก จำกัด โดยเด็ก Java Virtual Machine (JVM) ของเรา heap ขนาดและเราต้องใช้เวลาในการจัดเรียงข้อมูลด้วยตนเอง ด้วยการเปลี่ยนแปลงการออกแบบเราสามารถแก้ปัญหาทั้งสองอย่างนี้ได้โดยใช้ประโยชน์จากคุณสมบัติเฉพาะของ MapReduce อันดับแรกเราต้องการดูกรณีการเรียงลำดับข้อมูลในหน่วยความจำของแต่ละตัวลด ขณะนี้เราต้องแน่ใจว่าเราจะไม่ส่งข้อมูลไปยังตัวลดขนาดตัวเดียวมากกว่าที่จะสามารถใส่ข้อมูลในหน่วยความจำได้ ขณะนี้เราสามารถควบคุมสิ่งนี้ได้เพื่อให้แต่ละ JVM มีรายละเอียดเพิ่มเติม heap andor เพื่อแบ่งพาร์ทิชันข้อมูลข้อมูลชุดข้อมูลของเราในเฟสแผนที่ ในกรณีนี้ให้แบ่งพาร์ติชั่นเพิ่มเติมตามเวลาแบ่งข้อมูลของเราออกเป็นหน้าต่างเล็ก ๆ ในทางตรงกันข้ามกับการแบ่งแยกข้อมูลต่อไปอีกวิธีหนึ่งในการแก้ไขปัญหานี้ก็เพื่อให้ Hadoop สามารถจัดเรียงข้อมูลสำหรับเราในรูปแบบที่เรียกว่าสับเปลี่ยนเฟรม MapReduce ถ้าข้อมูลมาถึงตัวลดที่มีอยู่แล้วในลำดับที่เรียงลำดับเราสามารถลดการปล่อยหน่วยความจำของเราและลดจำนวนลูปผ่านข้อมูลได้โดยดูเฉพาะตัวอย่าง N ต่อไปสำหรับการคำนวณค่าเฉลี่ยเคลื่อนที่แต่ละแบบ นี้นำเราไปยังด้านที่สำคัญของบทความนี้ซึ่งเรียกว่าช่างเครื่องการเรียงลำดับสลับ shuffles การเรียงลำดับเป็นสิ่งที่เราสามารถปล่อยให้ Hadoop ทำเพื่อเราและ Hadoop ได้พิสูจน์แล้วว่าค่อนข้างดีในการจัดเรียงข้อมูลจำนวนมากชนะการแข่งขันการจัดเรียงสีเทาในปี 2008 ในการใช้ช่างการจัดเรียงแบบรองเราสามารถแก้ปัญหาทั้งกองและปัญหาการจัดเรียงของเราได้ค่อนข้างง่าย และมีประสิทธิภาพ ในการใช้ลำดับรองลงไปในโค้ดของเราเราจำเป็นต้องทำให้คีย์ประกอบด้วยคีย์ธรรมชาติและค่าตามธรรมชาติ ด้านล่างในรูปที่ 1 เราจะเห็นไดอะแกรมของรูปลักษณ์ที่มองเห็นได้ รูปที่ 1: Composite Key Diagram ปุ่มคอมโพสิตจะให้ข้อมูลที่จำเป็นในระหว่างการเล่นแบบสับเปลี่ยนเพื่อให้สามารถจัดเรียงได้ไม่เพียง แต่ใน 8220stock symbol8221 เท่านั้น แต่ยังใช้เวลาประทับด้วยเช่นกัน คลาสที่เรียงลำดับคีย์คอมโพสิตเหล่านี้เรียกว่าตัวเปรียบเทียบคีย์หรือ 8220CompositeKeyComparator8221 ที่นี่ เครื่องเปรียบเทียบที่สำคัญควรเรียงตามคีย์คอมโพสิตซึ่งเป็นส่วนผสมของคีย์ธรรมชาติและคุณค่าทางธรรมชาติ เราสามารถดูด้านล่างในรูปที่ 2 ซึ่งเป็นเวอร์ชันย่อยของการเรียงลำดับรองที่กำลังดำเนินการในคีย์คอมโพสิต 2 จำนวนเต็ม รูปที่ 2: CompositeKeyComparator การเรียงลำดับคีย์คอมโพสิต (คีย์เป็นจำนวนเต็ม) ในรูปที่ 3 ด้านล่างเราจะเห็นตัวอย่างที่สมจริงมากขึ้นเมื่อ we8217ve เปลี่ยนคีย์คอมโพสิตเป็นสตริงสัญลักษณ์หุ้น (K1) และการประทับเวลา (K2 แสดงเป็นวันที่ แต่ในโค้ดยาวเป็นมิลลิวินาที) แผนภาพได้จัดเรียงคู่ KV โดยทั้ง 8220K1: หุ้นสัญลักษณ์ 8221 (คีย์ธรรมชาติ) และ 8220K2: แสตมป์เวลา 8221 (คีย์รอง) รูปที่ 3: CompositeKeyComparator ที่ทำงานบนคีย์แบบผสมของเรา คีย์คอมโพสิตนี้แสดงด้วยสัญลักษณ์สตริงหุ้น (K1) และวันที่ (K2) เมื่อเราได้จัดเรียงข้อมูลของเราในคีย์คอมโพสิตแล้วตอนนี้เราจำเป็นต้องแบ่งพาร์ติชันข้อมูลเพื่อลดเฟส ในรูป -4 ด้านล่างเราจะเห็นว่าข้อมูลจากรูปที่ 3 ด้านบนได้รับการแบ่งพาร์ติชันด้วย NaturalKeyPartitioner รูปที่ 4: พาร์ทิชันโดยคีย์ธรรมชาติกับ NaturalKeyPartitioner เมื่อเราได้แบ่งพาร์ติชันข้อมูลของเราแล้ว reducers จะสามารถเริ่มดาวน์โหลดไฟล์พาร์ติชันและเริ่มขั้นตอนการผสานได้ รูปที่ 5 ด้านล่างเราจะเห็นว่าเครื่องเปรียบเทียบกลุ่มหรือ NaturalKeyGroupingComparator ถูกนำมาใช้เพื่อให้แน่ใจว่าการลดสาย () จะเห็นเพียงข้อมูลเชิงตรรกะที่จัดกลุ่มไว้สำหรับคีย์คอมโพสิตนั้นเท่านั้น รูปที่ 5: การจัดกลุ่มเครื่องเปรียบเทียบการผสานแฟ้มพาร์ติชัน พาร์ทิชันและตัวเปรียบเทียบกลุ่มสำหรับคีย์รวมควรพิจารณาเฉพาะคีย์ธรรมชาติสำหรับการแบ่งพาร์ติชันและการจัดกลุ่ม ด้านล่างนี้เป็นคำอธิบายสั้น ๆ เกี่ยวกับรหัส Simple Moving Average ซึ่งมีการเปลี่ยนแปลงเพื่อใช้การจัดเรียงสำรองและจัดเก็บไว้ใน github ถ้าคุณสังเกตเห็นชื่อของชั้นเรียนตรงกับคำศัพท์ที่ใช้ในแผนภาพด้านบนและใน Tom Whites Hadoop: คู่มือสรุป (บทที่ 8 คุณสมบัติ MapReduce) เพื่อให้เข้าใจง่ายขึ้น NaturalKey 8211 สิ่งที่คุณมักใช้เป็นคีย์หรือกลุ่มโดยผู้ดำเนินการ ในกรณีนี้คีย์ธรรมชาติคือกลุ่มหรือสัญลักษณ์หุ้นเนื่องจากเราจำเป็นต้องจัดกลุ่มข้อมูลหุ้นที่อาจไม่มีการจัดเรียงก่อนที่เราจะสามารถจัดเรียงข้อมูลและคำนวณค่าเฉลี่ยเคลื่อนที่ได้ง่าย Composite Key 8211 กุญแจสำคัญในการรวมกันของคีย์ธรรมชาติและคุณค่าทางธรรมชาติที่เราต้องการจัดเรียงตาม 5 การตอบสนองต่อ ldquo Simple Moving Average, Secondary Sort, และ MapReduce (Part 3) rdquo เคล็ดลับที่น่าสนใจกับ sorterpartitioner แบ่ง เท่าที่ฉันสามารถบอกได้ว่าการทำงานนี้ดีจนชุดกลายเป็นเรื่องที่ยาวนานมาก (คิดว่าเป็นข้อมูลระดับติ๊ก 30 ปี) 8211 ดูเหมือนว่าการแบ่งพาร์ติชันตามเวลาอาจเป็นเรื่องยุ่งยากมาก คุณรู้ไหมว่ามีอะไรที่สร้างขึ้นใน hadoop เช่น 8220overlapping partitioner8221 ซึ่งสามารถใช้ข้อมูลเดียวกันกับพาร์ติชันหลายรายการได้หรือไม่ฉันได้ทดลองใช้ Mappers ที่ทำให้ค่าซ้ำหลายคีย์ แต่ฉันสงสัยว่านี่เป็นวิธีการทั่วไปในการทำเช่นนี้หรือไม่ อีวานคุณตายด้วยขนาดของข้อมูลในคีย์เดียว ฉันตีปัญหาเดียวกันนี้เมื่อทำงานกับโครงการ openPDC สำหรับ NERC: เซ็นเซอร์ตัวเดียวอาจมีจำนวนหลายพันล้านจุดในระยะเวลาสั้น ๆ ดังนั้นในงานต้นแบบเราจึงปรับสิ่งต่างๆให้เป็นวันเดียว (3,600,000ms): ในอีกหนึ่งปี รุ่นที่ซับซ้อนฉันจะใช้ช่วงเวลาที่ทับซ้อนกันดังนั้น mapper จะได้รับข้อมูลที่เพียงพอจากแป้นที่อยู่ติดกันเพื่อให้ครอบคลุมความยาวของหน้าต่างเดียว ตอนนี้ I8217d บอกว่าคุณอยู่ในเส้นทางที่ถูกต้องโดยมีค่าซ้ำกัน ฉันรู้ว่านี่ไม่เกี่ยวข้องกับค่าเฉลี่ยเคลื่อนที่ แต่ความแม่นยำของการจับคู่ชุด SAX เวลาที่ใช้ใน PDC ได้ดำเนินการบางอย่างแบบนี้ (ยกเว้นการใช้ MapReduce API 2) และในลูปของฟังก์ชันลด () เมื่อใดก็ตามที่ next () method ถูกเรียกใช้ใน Iterator เราได้ค่าใหม่ แต่คีย์ยังมีการเปลี่ยนแปลงอย่างน่าอัศจรรย์ แต่ส่วนของคีย์คอมโพสิตที่ไม่ได้ใช้เป็นคีย์ธรรมชาติ (timestamp ในตัวอย่างนี้) เปลี่ยนแปลงไป นี้ค่อนข้างน่าแปลกใจ การดำเนินการนำทางโพสต์การนำทางใช้การนำ Apache Hadoop ในรัฐบาลกลางค่าเฉลี่ยค่าเฉลี่ยเคลื่อนที่เฉลี่ยค่าเฉลี่ยเคลื่อนที่โดยเฉลี่ยคุณควรจะแก้ปัญหานี้ตามคำอธิบายงานโดยใช้ภาษาใด ๆ ที่คุณอาจรู้จัก คำนวณค่าเฉลี่ยเคลื่อนที่แบบง่ายๆของชุดตัวเลข สร้างคลาการทำงานของรัฐที่ต้องใช้ระยะเวลาและส่งกลับค่าตามปกติที่ใช้ตัวเลขเป็นอาร์กิวเมนต์และส่งกลับค่าเฉลี่ยเคลื่อนที่โดยเฉลี่ยของอาร์กิวเมนต์จนถึงตอนนี้ ค่าเฉลี่ยเคลื่อนที่โดยเฉลี่ยเป็นวิธีการคำนวณจำนวนกระแสเฉลี่ยโดยเฉลี่ยเพียง 160 หมายเลข 160 P จากสตรีม 160 ซึ่ง 160 P 160 เรียกว่าช่วงเวลา สามารถใช้งานได้โดยการเรียกใช้ initialing routine กับ 160 P 160 เป็นอาร์กิวเมนต์ของมัน 160 I (P), 160 ซึ่งควรจะคืนค่าตามปกติซึ่งเมื่อเรียกกับแต่ละสมาชิกต่อเนื่องของสตรีมตัวเลขคำนวณค่าเฉลี่ยของ ), 160 P 160 ตัวสุดท้ายของพวกเขาอนุญาตให้เรียก 160 SMA () นี้ คำ 160 160 stateful ในคำอธิบายงานหมายถึงต้อง 160 SMA () 160 เพื่อจดจำข้อมูลบางอย่างระหว่างการโทรไป 160 ระยะเวลา 160 P 160 ตู้ที่สั่งอย่างน้อย 160 160 หมายเลขสุดท้ายจากแต่ละ การโทรแต่ละครั้ง Stateful 160 หมายความว่าการเรียกเลขหมาย 160 I (), 160 initializer 160 ควรจะแยกแต่ละครั้งที่ทำ 160 ไม่ 160 รัฐที่บันทึกไว้เพื่อให้สามารถใช้ข้อมูลได้สองแบบ Pseudo-code สำหรับการใช้ 160 SMA 160 คือ: รุ่นนี้ใช้คิวถาวรเพื่อเก็บค่า p ล่าสุด แต่ละฟังก์ชันที่ส่งกลับมาจาก init-moving-average จะมีสถานะเป็นอะตอมที่เก็บค่าคิวไว้ การใช้งานนี้ใช้รายการแบบวงกลมเพื่อจัดเก็บตัวเลขภายในหน้าต่างที่จุดเริ่มต้นของตัวชี้ย้ำแต่ละอันหมายถึงเซลล์ของรายการที่เก็บค่าที่เพิ่งย้ายออกจากหน้าต่างและจะแทนที่ด้วยค่าที่เพิ่มขึ้น การใช้การแก้ไข Closure ปัจจุบันนี้ sma cant เป็น nogc เนื่องจากจัดสรรการปิดบน heap การวิเคราะห์หนีบางอย่างสามารถลบการจัดสรรฮีปได้ การใช้การแก้ไข Struct รุ่นนี้จะหลีกเลี่ยงการจัดสรรฮีปของการปิดเพื่อเก็บข้อมูลไว้ในกรอบกองซ้อนของฟังก์ชันหลัก เอาท์พุทเดียวกัน: เพื่อหลีกเลี่ยงการประมาณจุดลอยเก็บซ้อนขึ้นและการเจริญเติบโตรหัสสามารถดำเนินการรวมเป็นงวดในอาร์เรย์แถววงกลมทั้งหมด การใช้งานนี้จะสร้างอ็อบเจ็กต์ร่วมกันสองสถานะ (ฟังก์ชัน) เป็น idiomatic ใน E เพื่อแยกข้อมูลจาก output (อ่านจากเขียน) แทนที่จะรวมไว้ในวัตถุหนึ่ง โครงสร้างนี้เหมือนกับการใช้งาน Standard DeviationE โปรแกรม Elixir ด้านล่างสร้างฟังก์ชันที่ไม่ระบุตัวตนด้วยระยะเวลาฝังตัว p ซึ่งใช้เป็นระยะเวลาของค่าเฉลี่ยเคลื่อนที่ที่เรียบง่าย ฟังก์ชัน run จะอ่านข้อมูลตัวเลขและส่งผ่านไปยังฟังก์ชันที่ไม่ระบุตัวตนที่สร้างขึ้นใหม่จากนั้นตรวจสอบผลที่ได้รับจาก STDOUT ผลลัพธ์แสดงด้านล่างโดยมีค่าเฉลี่ยตามด้วยข้อมูลที่จัดกลุ่มซึ่งเป็นพื้นฐานของค่าเฉลี่ยเคลื่อนที่แต่ละค่า Erlang มีการปิด แต่ตัวแปรไม่เปลี่ยนรูป วิธีแก้ปัญหาคือการใช้กระบวนการและข้อความง่ายๆผ่าน API ตาม ภาษาเมทริกซ์มีขั้นตอนการคํานวณค่าเฉลี่ยการร่อนสําหรับลำดับรายการที่กำหนด มีประสิทธิภาพน้อยกว่าการวนรอบในคำสั่งต่อไปนี้ แจ้งให้ฉันป้อนข้อมูลอย่างต่อเนื่อง ซึ่งจะถูกเพิ่มลงในตอนท้ายของรายการ L1 L1 สามารถพบได้โดยการกด 2ND1 และค่าเฉลี่ยจะอยู่ใน ListOPS กด ON เพื่อยุติโปรแกรม รายการที่มีค่าเฉลี่ยของอาร์กิวเมนต์ที่ให้มาโปรแกรมที่ส่งคืนค่าที่ง่ายในแต่ละคำร้อง: รายการคือรายการที่มีค่าเฉลี่ย: p คือช่วง: 5 จะแสดงรายการค่าเฉลี่ย: ตัวอย่างที่ 2: การใช้โปรแกรม movinav2 (i. , 5) - เริ่มต้นการคำนวณค่าเฉลี่ยเคลื่อนที่และกำหนดระยะเวลา 5 movinav2 (3, x): x - ข้อมูลใหม่ในรายการ (ค่า 3) และผลลัพธ์จะถูกจัดเก็บในตัวแปร x และแสดง movinav2 (4, x) : x - ข้อมูลใหม่ (ค่า 4) และผลลัพธ์ใหม่จะถูกเก็บไว้ในตัวแปร x และแสดง (43) 2 คำอธิบายของฟังก์ชัน movinavg: ตัวแปร r - เป็นผลลัพธ์ (รายการเฉลี่ย) ที่จะถูกส่งคืนตัวแปร i - เป็นตัวแปรดัชนีและชี้ไปที่จุดสิ้นสุดของรายการย่อยที่รายการถูกเฉลี่ย ตัวแปร z - ตัวแปรผู้ช่วยเหลือฟังก์ชันใช้ตัวแปร i เพื่อกำหนดว่าค่าใดของรายการจะได้รับการพิจารณาในการคำนวณค่าเฉลี่ยถัดไป เมื่อทำซ้ำทุกครั้ง i ตัวแปรจะชี้ไปที่ค่าสุดท้ายในรายการที่จะใช้ในการคำนวณโดยเฉลี่ย ดังนั้นเราจะต้องคิดออกซึ่งจะเป็นค่าแรกในรายการ มักจะต้องพิจารณาองค์ประกอบ p ดังนั้นองค์ประกอบแรกจะเป็นดัชนีที่จัดทำดัชนีโดย (i-p1) อย่างไรก็ตามในการทำซ้ำครั้งแรกที่การคำนวณมักจะเป็นค่าลบดังนั้นสมการต่อไปนี้จะหลีกเลี่ยงดัชนีเชิงลบ: max (i-p1,1) หรือการจัดสมการ max (i-p, 0) 1 แต่จำนวนขององค์ประกอบในการทำซ้ำครั้งแรกจะเล็กลงค่าที่ถูกต้องจะเป็น (ดัชนีสิ้น - เริ่มดัชนีที่ 1) หรือการจัดสมการ (i - (max (ip, 0) 1) 1) แล้ว , (i-max (ip, 0)) ตัวแปร z มีค่าร่วมกัน (max (ip), 0) ดังนั้น beginindex จะเป็น (z1) และ numberofelements จะเป็น (iz) mid (list, z1, iz) จะคืนค่ารายการที่จะรวมเป็นค่าเฉลี่ย ( .) จะรวมพวกเขา sum (.) (iz) ri จะเฉลี่ยพวกเขาและเก็บผลในสถานที่ที่เหมาะสมในรายการผลลัพธ์ fp1 สร้างโปรแกรมบางส่วนกำหนด (ในกรณีนี้) พารามิเตอร์ที่สองและสาม

No comments:

Post a Comment