部落格

  • 搭載寶馬發動機!這車還沒上市就引起轟動!

    搭載寶馬發動機!這車還沒上市就引起轟動!

    不僅如此,華晨中華V7採用麥弗遜式獨立前懸、扭力梁式/多連桿式后懸,底盤系統由寶馬和麥格納參与優化,可輕鬆駕馭各種複雜地形和艱險路段,感受隨心而馭、征服天地的操控樂趣。共享寶馬供應商,帶來豪華車的品質體驗。

    4月25日,代表着華晨中華與德國寶馬十五年全產業鏈融合的里程碑之作——中級SUV華晨中華V7在北京車展耀世登場,全球首發。嚴格按照寶馬開發設計流程、搭載BMW授權生產的發動機,與寶馬共享核心供應商體系、按照德系標準生產,顛覆而生的華晨中華V7,旨在以純正德系豪華品質體驗為消費者帶來自主高端SUV新選擇,這也意味着華晨中華與寶馬走向深度融合的全新階段,華晨中華品牌自此邁向“中國寶馬”時代的新起點。

    十五載與巨人同行 華晨中華破繭化蝶

    2003年百年寶馬來到中國,憑藉雄厚的工業基礎和領先的技術優勢,華晨中華成為寶馬在華唯一的合作夥伴,從此開創了中外汽車工業合資合作的傳奇典範。

    攜手十五年,雙方互信共進,華晨中華在寶馬的支持下得到了長足的進步,從造車理念到核心技術、質量控制等,華晨中華始終以德系品質和技術為標準,完成了品質升級和技術沉澱。在品質方面,華晨中華全面引入寶馬品質標準,包括寶馬質量標準體系、寶馬“零缺陷”管理理念、寶馬VpS生產增值系統,在業內首創了產品經理制度和首席質量官制度,建立了貫穿產品質量全過程的ppQ1-10質量保障體系,從生產到研發華晨中華均以德系標準締造高品質自主精品。

    在核心技術方面,華晨中華獲得寶馬授權生產N20及王子系列四款符合歐六排放標準的世界先進發動機,華晨中華因此也成為中國改革開放三十多年來汽車行業唯一一個從合資夥伴取得當代先進核心技術的中方企業。

    掌握了汽車發動機核心技術的華晨中華再次乘勝追擊,在寶馬的支持下,聯合麥格納聯手打造全新M8X智能模塊化平台,該平台在德國工業4.0基礎上構建,並汲取寶馬面向未來的ACES造車戰略理念,具有全面引入寶馬開發流程、原生寶馬技術、寶馬智能製造、智能駕駛等領先優勢。是華晨中華與德國寶馬十五年攜手共進、融匯雙方合作精髓的集大成之作。具備擴展衍生系列化中高端戰略車型的能力。

    M8X智能模塊化平台的到來標志著華晨中華的發展啟動了強勁新引擎,華晨中華正處於品牌與技術厚積薄發的前夜,開創了自主品牌的新時代。

    打造“中國寶馬”華晨中華V7賦能品牌新未來

    作為M8X平台的首款產品,華晨中華V7具備最領先的技術基因、最先進的智能製造水準,最純正的寶馬血統和最高的安全標準,是中國自主品牌中真正具備豪門氣質的划時代傑作。華晨中華V7的推出,對於中華品牌而言不僅是自我的顛覆,更是從動力、品質、安全、智能化四大維度重新定義了自主高端SUV的產品力。

    搭載寶馬源動力,感受純正德系操控樂趣。全新華晨中華V7搭載BMW授權生產的發動機集雙渦管增壓、高精度直噴、連續可變氣門升程、雙連續可變氣門正時等技術於一身,在寶馬專家支持下優化動力總成系統方案設定、匹配,以及對發動機控制系統的重新調校,在格特拉克7速濕式雙離合變速箱的配合下,更將這款發動機的性能發揮到極致,動輸出高達150千瓦,峰值扭矩達280牛·米,百公里加速僅為8.9秒。不僅如此,華晨中華V7採用麥弗遜式獨立前懸、扭力梁式/多連桿式后懸,底盤系統由寶馬和麥格納參与優化,可輕鬆駕馭各種複雜地形和艱險路段,感受隨心而馭、征服天地的操控樂趣。

    共享寶馬供應商,帶來豪華車的品質體驗。隨着華晨中華與德國寶馬合作的深度融合,華晨中華V7所有核心部件共享了寶馬供應商體系:發動機來自BMW授權生產的發動機,變速箱來自格特拉克。此外,更有德國大陸、博世、曼胡默爾、貝爾,美國TRW、德爾福、天納克、江森,法國法雷奧、米其林、意大利馬瑞利,日本海德世、日本三電,韓國岱摩斯、萬都,奧地利MSE等全球零部件領域頂尖品牌組成豪華天團,置身其中,讓德系豪華車尊崇精緻的品質體驗油然而生。

    五星標準設計,暢享安全出行體驗。承襲百年寶馬對安全的執著追求,華晨中華V7按照2018版全新C-NCAp五星標準進行設計,提升對車內外人員全方位主被動保護能力。選用與BMW相同品質的寶鋼板材,高強度鋼比例達到56%,屬同級最高水平。熱成型加強鋼天窗骨架,安全穩定,A、B柱採用超高強熱成型鋼板,抗拉強度超過1500Mpa,事故中能有效減少駕駛艙變形,保護駕乘人員的安全。此外,華晨中華V7配置了同級中先進防碰撞預警+自動緊急剎車系統,以及領先同級的車道偏離預警系統、盲區監測,以陪伴之心呵護安全,讓每一段旅途都心安。

    萬物互聯,跨越時空的智能體驗。移動互聯時代,萬物盡在雲端,一切盡在掌控。華晨中華V7通過車載WIFI,駕乘者能0秒與世界互聯,配備同級別尺寸最大的10.4寸中控屏,搭載BriAir2.0車聯網系統,可實現語音控制、遠程控制、智聯娛樂等功能,為提供用戶極致人性化的智能汽車新體驗。用戶可通過手機App遠程了解車況,實現對發動機、空調、車窗、車鎖等全方位控制,尋車、防盜報警等智能化功能能夠實現即使人車分離也能對車輛狀況了如指掌。車輛與智能手機的“無縫接軌”,讓智能體驗跨越時空、時刻隨行。

    華晨中華V7的到來以德系標準開啟了華晨中華品牌進入“中國寶馬”時代,代表了追求極致性能自主高端SUV新勢力的崛起,為更多用戶帶來純正德系豪華SUV的新體驗。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※Google地圖已可更新顯示潭子電動車充電站設置地點!!

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※別再煩惱如何寫文案,掌握八大原則!

    網頁設計最專業,超強功能平台可客製化

  • 不如16.98萬的國產SUV純粹?2.0T+9AT的7座SUV表示不屑

    不如16.98萬的國產SUV純粹?2.0T+9AT的7座SUV表示不屑

    實在是難為了造車的車企,由此催生出的“全能选手”也是越來越多。

    大家發現了么,現在純粹的車好像越來越少了。

    前些年總流行混搭、串燒,如今說的好聽了一些叫跨界、融合,車型上有SUV跨界轎車,更有SUV跨界MpV;定位上更是注重全面,要運動也要舒適,想豪華也想家用,求動力強也求夠省油…實在是難為了造車的車企,由此催生出的“全能选手”也是越來越多…

    本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    ※教你寫出一流的銷售文案?

  • 夏日將至,稍有不慎愛車易罷工 夏季用車注意事項須知!

    夏日將至,稍有不慎愛車易罷工 夏季用車注意事項須知!

    4。高頻使用空調易吸進灰塵,為此需偶爾開啟最大風量擋,將風道內殘留的浮塵吹出,定期清洗空調濾芯。5。夏季車內迅速降溫妙訣:把駕駛位車窗打開,反覆開關副駕駛位車門,能加速空氣流通,迅速降溫,繼而再開空調輔助降溫,降低空調系統負載。

    夏日將至,正當你泰然自若暢享着車內空調時,你可知愛車卻匍匐在高溫地表上被烈日炙烤?即便如此,它還是兢兢業業將乘員從A點送往B點,不知疲倦,也不曾抱怨。

    殊不知,汽車也有自己的“小情緒”,嚴峻工作條件或成汽車“情緒失控”導火索,稍有不慎在高速路拋錨就夠你吃一壺。為此,總結出夏季用車注意事項。

    1. 輪胎是汽車與地面接觸的唯一部件,長時間在高溫環境下運轉對產品本身的品質和狀況考驗甚高,不容小覷。為此,夏季出行前檢測胎壓、輪胎是否存在鼓包等尤為重要。

    其次,換裝高品質輪胎,如美國固特異御乘系列輪胎就能在性能、舒適與經濟性間取得韌性平衡,雪佛蘭、奔馳、奧迪便是其忠實擁躉。

    2. 夏季氣溫高,水和油容易蒸發,要養成常檢查水箱水位、曲軸箱機油刻度、制動總泵內製動液液面高度、蓄電池內電解液密度和液面高度的習慣。此外,油箱蓋、水箱蓋沒蓋嚴也會加速蒸發。

    3. 部分“老司機”甚至自作聰明以自來水代替防凍液。實則不然,冷卻效果不達標會加劇机械硬件使用壽命的衰減程度。專業防凍液既能耐低溫又能耐高溫,一般防凍液沸點高達200℃,建議選用原廠防凍液為愛車防暑降溫。

    4. 高頻使用空調易吸進灰塵,為此需偶爾開啟最大風量擋,將風道內殘留的浮塵吹出,定期清洗空調濾芯。

    5. 夏季車內迅速降溫妙訣:把駕駛位車窗打開,反覆開關副駕駛位車門,能加速空氣流通,迅速降溫,繼而再開空調輔助降溫,降低空調系統負載。

    坊間存在一種聲音:對汽車保養這一概念模糊,只知道時間開長了送往4S店保養就准沒錯。

    但現況卻是多數廠商僅提供次數少得可憐的免費保養服務,部分4S店銷售甚至終日一副輕佻臉容迎人,在售後保養維修環節亟待改進。

    相比之下,上汽通用雪佛蘭誠摯負責的售後服務態度,可謂當前急於求成的勢利市場中的一股清流。

    在實力中級SUV探界者上市1周年之際,雪佛蘭為2017年探界者車主舉辦售後服務體驗日活動。即日起至5月31日,2017年探界者車主親臨煥新升級的雪佛蘭4S店可體驗貼心售後服務,體驗內容包括:E-Service、雙人快速保養、售後新FED、夏季專項檢測、U·CLUB。

    受邀進店的2017探界者老車主不僅能在活動中親身體驗全新升級的雪佛蘭售後服務,還將獲贈雪佛蘭4S店的機濾券一份。

    活動過程當中,雪佛蘭將挑選專屬服務顧問與經過上汽通用培訓體系專業認證的高水平專業技師為進店車主打造一對一的VIp客戶服務。

    當車主駕車進店時,售後大屏上將智能显示識別車牌后的歡迎標語,此刻專屬服務顧問將第一時間前往接待,車主只需交付車輛,安心地在休息區通過“MyChevy” App上的“掌上車間”模塊輕鬆便捷地掌握在修車輛的服務進度信息,整個維保養過程更為可視化。

    遠不止此,車主還將免費享受夏季專項車輛檢測,其內容涵蓋發動機、變速箱、底盤及電氣,通過多達22項的檢測內容為夏天做好準備。

    在紮實推進全新升級的進程中,雪佛蘭已於2017年完成了全國100家經銷商店面的升級改造,並採用全球統一的設計標準,展現與全球同步的品牌形象。

    未來,雪佛蘭將持續以更優質的服務回饋每一位車主,進一步打造雪佛蘭值得信賴的品牌形象。在硬件設施和軟件配置上融入更多年輕、運動、時尚的新元素,全力打造全球品牌、全球標識的新面貌。

    想更了解雪佛蘭金領結服務,點擊入內:動車更懂本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※別再煩惱如何寫文案,掌握八大原則!

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

  • 最高優惠8萬,這款20多萬的SUV牌子超硬,車主卻說…

    最高優惠8萬,這款20多萬的SUV牌子超硬,車主卻說…

    6/7百公里油耗(L):6。5/7。3車主百公里油耗(L):9。08/10。5驅動方式:前置前驅/前置四驅底盤懸挂:前麥弗遜/后多連桿實際體驗(體驗者182cm):前排頭部3指/後排頭部3指/後排腿部1拳。感興趣的朋友可以點擊小程序查看詳細口碑,從口碑中可以看到車主們對奔馳GLA的內外設計可謂相當滿意,也稱它為適合年輕人代步的車型。

    奔馳GLA類似跨界SUV的車身結構極富有衝擊力,動感化的車身設計語言,還能給用戶帶來一些柔美的觀感體驗!

    而比較特別的是,GLA的坐姿並不高,較低的車身重心帶來更充足的操控信心。它的1.6T車型的動力在D擋模式下被調得頗為平順,而在S擋模式下,動力則靈敏不少,動力輸出變得強勁起來!駕駛起來也挺有樂趣的。

    長寬高:4449*1804*1535mm

    軸距:2699mm

    定位:緊湊型SUV

    在形象方面,奔馳GLA輪廓飽滿、線條充滿力量感,更展現運動與時尚,相對低矮的車身運動氣息強烈!

    內飾方面它不僅做工細緻且設計也有不錯的豪華氣質,獨立是中控屏查看便利,值得一提的是它採用個性的多個圓形空調出風口,精緻感得以體現!

    發動機:1.6T/2.0T

    最大馬力(pS):156/184/211

    最大扭矩(Nm):250/300/350

    變速箱:7DCT

    百公里加速(s):8.5/7.6/7

    百公里油耗(L):6.5/7.3

    車主百公里油耗(L):9.08/10.5

    驅動方式:前置前驅/前置四驅

    底盤懸挂:前麥弗遜/后多連桿

    實際體驗(體驗者182cm):前排頭部3指/後排頭部3指/後排腿部1拳。

    感興趣的朋友可以點擊小程序查看詳細口碑,從口碑中可以看到車主們對奔馳GLA的內外設計可謂相當滿意,也稱它為適合年輕人代步的車型!只是對於車燈光源、頭部空間、懸架的軟硬程度有些不滿。

    咱們發現奔馳GLA的優惠幅度相當可觀,在廣州、武漢、上海等地優惠幅度較大,但需要搭配加裝飾、購買精品、店內上保險、貸款等項目。所有實際能優惠多少還是因為各個地區而有所差異,各位在購車前可要注意了。

    奔馳CLA的內外設計頗有特色,內飾大面積銀色裝飾的運用、鍍鉻的出風口加上懸浮的中控大屏都彰顯檔次感!而且操控性也不錯,只是低配車型的配置不算太高,如果價格適宜的話選擇中配車型更加實用!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※別再煩惱如何寫文案,掌握八大原則!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

  • 這款帥氣SUV僅8.98萬起步,還能免幾千塊稅費,值嗎?

    這款帥氣SUV僅8.98萬起步,還能免幾千塊稅費,值嗎?

    另一款是最大功率為90kW,這款動力強,0-50km/h加速為4。2秒,極速135km/h,但續航里程只有252km。江鈴E400前麥弗遜后扭力梁的懸挂也是小型SUV的標配。后扭力梁懸挂結構緊湊,可以將空間留給乘客。江鈴E400的加速響應不是很快,地板油下去,加速度會慢慢提升,到達頂點的時候又會立刻下降,跟汽油車非常不同。

    4月30日,江鈴E400正式上市,補貼后的售價為8.98萬-10.98萬(全國統一價格)。同天下午,我們有幸試駕這款純電動SUV—江鈴E400。說實話,我原本有點擔心純電動車高重量的特性會拉低整車的駕駛和乘坐感受,但實際體驗下來,純電動車在某些方面反而有所提升。另外,純電動車前期購買免購置稅,免拍牌費,後期超低使用成本。讓直呼,我還買什麼汽油車。在下文就磕叨磕叨為什麼。

    江鈴E400的車身尺寸並不大,屬於小型SUV的範疇。由於小型SUV多數是面向年輕人的產品,所以江鈴E400的外觀也有不錯的設計感,側面雙腰線的組合令整車充滿動感,起伏有致的尾部與車頭互為呼應。整車的外觀顏值算比較高的。

    江鈴E400的內飾簡潔,用料非常豐富,基本上與人體接觸的地方都用軟性材料包裹。全液晶儀錶盤信息豐富,但是設計感略為不足,比較重要的時速,剩餘電量,續航里程不夠顯眼。另一個問題是,把坐姿調高一點,是看不到儀錶盤轉向燈的指示,只能將座椅調低。希望下一個版本能夠改進。7英寸的中控屏採用了安卓系統,未來可以通過網絡升級系統,目前的功能不多,但是導航,音樂,藍牙電話,電台這幾個基本配置還是有的。

    乘坐空間是江鈴E400的優點,1米75的乘客在前排可頭部有1拳以上的空間。同一位乘客在後排可以獲得兩拳以上的腿部空間,一拳以上的頭部空間。另外,後排中央地台全平,後排中間座椅也沒有凸起。江鈴E400可以保證5個成年人獲得不錯的乘坐空間。

    江鈴E400有兩款動力配置,一款是最大功率為50kW的電機,這款動力弱一點,0-50km/h加速小於6秒,極速120km/h,但是續航更長,達到310km。另一款是最大功率為90kW,這款動力強,0-50km/h加速為4.2秒,極速135km/h,但續航里程只有252km。

    江鈴E400前麥弗遜后扭力梁的懸挂也是小型SUV的標配。后扭力梁懸挂結構緊湊,可以將空間留給乘客。

    江鈴E400的加速響應不是很快,地板油下去,加速度會慢慢提升,到達頂點的時候又會立刻下降,跟汽油車非常不同。江鈴E400的坡道輔助邏輯也很有趣,會先溜后一段,然後剎住。江鈴E400沒有怠速這一功能,起步必須踩油門才能走,不支持蠕動。這兩個點是需要加強的地方。

    江鈴E400的駕駛和乘坐舒適性方面確實給了我很大的驚喜。試駕前,我認為過重的車身會讓懸挂很難找到平衡點,太硬,舒適性差,太軟,點頭嚴重。實際上,我之前是想錯了一點。純電動車將電池裝在前後軸之間,所以前軸和后軸的重量布置更加均勻,不會因為車身重了而加重前軸的負荷。所以江鈴E400的舒適性和操控性都得到了很好地保障。後排舒適性比前排稍差。

    江鈴E400的隔音水準一般,而且配置上寫好的隔熱玻璃也不太隔熱,下午被曬得好燙,這有可能是試裝車的緣故。

    慣例附上充電速度。

    總結:江鈴E400在大方面其實是做得很出色的。整車的空間、舒適性、操控性跟燃油車相比不落下風。但是江鈴E400的小細節上有些粗枝大恭弘=叶 恭弘,所幸的是,這些點可以通過後期軟件的升級來完善。江鈴E400的續航里程可以滿足市區代步,周末短途旅行的需求。個人認為,如果你99%的情況都是在城市生活,一款純電動車會比汽油車來得更加省心省錢。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※別再煩惱如何寫文案,掌握八大原則!

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※超省錢租車方案

    ※教你寫出一流的銷售文案?

    網頁設計最專業,超強功能平台可客製化

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

  • 同是2.0T+7速雙離合,為何那麼多人放棄大眾買貴4萬的豪車?

    同是2.0T+7速雙離合,為何那麼多人放棄大眾買貴4萬的豪車?

    我曾經從一位一汽的裝配工口中聽過這樣一句話:大眾的車底盤焊縫要求不能伸進指甲就合格,但是。奧迪的要求是不能伸進頭髮。上面我們說到了兩車的造車成本以及測試種類,那就不免出現一個更加專業名詞——NVH,直白一點說就是車輛的胎噪,風噪和發動機噪音。

    在如今這個車水馬龍的城市中,滿大街都是車,而車一多,咱們買車選車就自然變得更加困難了。而且中國人買車需要的可不單單隻是性價比,更需要的是面子,並且一定要大。

    特別是當BBA這種豪華品牌不斷的將車型價格下探之後,吸引了更多的中國人可以花普通品牌的價錢買到掛着“豪華品牌商標”的汽車,這也是為什麼如今奔馳、寶馬、奧迪這些車會滿大街跑的原因。

    當然,相比起豪華品牌的紙醉金迷,普通品牌的優勢更多在於極高性價比。不過不可否認的是,豪華品牌的品牌溢價能力,的確是普通品牌無法比擬的。

    並且豪華車除了可以給人帶來身份的象徵,還帶來了更極佳的駕乘感受,畢竟“豪華”兩字已經說明了一切。如今各類豪華品牌的入門車型售價,儼然已經可以跟普通品牌針鋒相對了。

    那在面對預算有限的情況下,到底是咬咬牙弄台豪華品牌,享受一下豪車帶來的優越感呢,還是輕鬆的拿下普通品牌,得到其極具性價比配置的同時還能多買幾台蘋果XXX呢?

    如果有一天,你開着一輛頂配大眾高爾夫GTI去相親,對方父母只會認為你混得一般,但是當你開着一輛掛這“四個環”的丐版奧迪A3去相親,人家則會認為,這家孩子不錯,年紀輕輕就開得起奧迪了。

    一輛頂配的GTI比起低配的奧迪A3,怎麼著也得貴上好幾萬吧,但是為什麼人人都會認為奧迪更高級呢。

    奧迪嘛,在國人心目中一直存在着“官車”的形象,而大眾則是普羅大眾都消費得起的存在。而且再怎麼說你也只是大眾,我可是奧迪啊,世界公認的三大豪華品牌之一,買車看的不正是牌子,面子嘛!

    不過很多朋友都認為,A3其實就是換標高爾夫,而且那個標還不便宜。那這次咱們就以高爾夫GTI以及奧迪A3兩廂頂配來說話。到底用幾台蘋果XXX的錢去買一個四環標值不值得?

    目前兩車在廣州的裸車價基本是:奧迪A3頂配23萬左右,高爾夫GTI19萬左右,也就是四萬左右的差價,雖然不同地區情況不同,不過差價相信基本也是相差無幾。

    相信有了解過這兩款車的朋友都知道,兩者同為一汽旗下合資公司的產品、同是MQB平台、同一工廠生產、相同的EA888發動機、相同的變速箱。聽起來兩者的差異性極小,但是細分之後你就知道還是有區別的。

    相同的EA888發動機,在奧迪A3頂配身上只能輸出190匹馬力,但是在GTI身上則能爆發出220馬力。兩者都匹配了7速雙離合變速器,不過在大眾身上叫DSG,在奧迪身上喊S tronic而已。

    從平台上看,兩者均出於MQB橫置模塊化平台,這就不難讓人認為兩者的底盤變現以及操控性上是不是一致呢?事實卻並非如此。就好比一台計算機,平台就如同一個主板,再裝配不同的顯卡,聲卡,內存,CpU,不同搭配所得出的效果自然也是截然不同的。

    另外,雖然奧迪有着品牌溢價,但相對應的供應商也會與大眾有所區別,零配件的成本也會相應的提高,並且在裝配工藝上奧迪也高於大眾。。單單從用漆方面就可以看得出這點,奧迪A3大部分採用的均為高成本、高品質的珠光漆。

    還有奧迪需要做的測試種類,無論是整車測試還是零部件試驗的嚴苛程度,複雜性,精密度,都遠遠高於大眾。我曾經從一位一汽的裝配工口中聽過這樣一句話:大眾的車底盤焊縫要求不能伸進指甲就合格,但是………奧迪的要求是不能伸進頭髮!!!

    上面我們說到了兩車的造車成本以及測試種類,那就不免出現一個更加專業名詞——NVH,直白一點說就是車輛的胎噪,風噪和發動機噪音。從各大測評機構的測試結果都不難看出,奧迪A3對NVH的把控要比高爾夫好,另一方面也表明了,豪華品牌在駕乘感受上下的功夫要比大眾這種普通品牌更多。

    至於外觀,咱們就略過不說了,反正蘿蔔青菜各有所愛,奧迪自帶四環光環,高爾夫GTI則滿身情懷。內飾的話,GTI也不能說完敗,只能說那萬年不變的布局真的讓人又愛又恨,而A3的內飾那才真的稱得上人人喜愛,既精緻又簡潔還顯高級感,而且細看內飾的做工用料,無論是視覺的衝擊力還是觸感的細膩度上,相信什麼叫奧迪,什麼叫大眾自然一目瞭然了。

    不過在配置的差異上,奧迪A3比起GTI似乎真的閹割太多了,要知道那可是四萬塊的差價啊。此外,奧迪選裝配置的價錢也非常感人,一套真皮座椅就小一萬了,估計想選裝到GTI這麼豐富配置的時候你就得多掏幾百張毛爺爺了,不得不說奧迪這生意還真好賺!

    估計看到這裏,大家都不難得出一個結論:奧迪A3當然不是換標高爾夫那麼簡單。

    儘管GTI的馬力、配置都比A3更優越,但是從用料做工、質感品控、駕乘感受方面來看,A3比起GTI則是更勝一籌。終究是豪華品牌嘛,還是會有自己的擔當,哪怕是十幾萬起步的入門車型,他們都會用心去對待。所以與其說多花了幾萬塊錢要裝逼買個豪華商標,倒不如老老實實的承認“一分錢一分貨”這個道理。

    再舉個例子,如果奧迪A3賣着高爾夫的價錢,我估計你也不大敢買吧?又或者說,奧迪如果把A3的價格降低到高爾夫這個層次,我相信一定會大大衝擊高爾夫的銷量,而且奧迪作為豪華品牌的形象也會因此大打折扣。在汽車界,類似的例子比比皆是,所以單單拿平台來說事,似乎就有點無稽之談了。

    至於遇到類似的問題該怎麼去選擇,那就只能看個人需求以及兜里毛爺爺的多與少啦。反正有錢的話,那必須選豪華品牌,去酒吧把鑰匙往桌子一拍,嘿嘿,那效應老司機都懂都懂!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

  • 玩車的人都在捧的本田發動機,真的這麼神?

    玩車的人都在捧的本田發動機,真的這麼神?

    然而,這種熟悉的“爆tec”感覺沒有出現在最新的謳歌TLX-L上。謳歌是本田的豪華品牌,一切的用料,技術,做工等都用上高標準。就連本田被人詬病的隔音謳歌也能做得安靜。被拉高轉的本田發動機“爆tec”時的感覺聲音和動力都有着明顯變化,讓人為之興奮,但開着謳歌TLX-L卻沒有這種感覺。

    本田,一個無人不知無人不曉的一個汽車品牌。尤其是在廣東地區,更是本田粉活躍的地方,大街上跑的10輛車中,有4輛或5輛是本田車型。

    買本田車,除了買質量可靠性外,更多的是為了“買發動機送車”,而坊間也流傳着本田金句VTEC is the best。可想而知,本田發動機技術含量和民望有多高。

    本田發動機的看家技術VTEC和i-VTEC技術外,在近年也推出VTEC Turbo這渦輪組合技術。

    那本田技術牛在哪?主要除了有可變氣門正時外,還有氣門升程這一技術。氣門升程技術並不是很多發動機有,除了寶馬和英菲尼迪VQ37系列外,還真是寥寥無幾。

    開過本田的人未必知道什麼叫“爆tec”,但拉過高轉的人就知道。當發動機轉速拉到5000轉左右的時候,聲音突變,發動機也感覺顫抖一下。這就是“爆tec”給人的感覺。

    然而,這種熟悉的“爆tec”感覺沒有出現在最新的謳歌TLX-L上。謳歌是本田的豪華品牌,一切的用料,技術,做工等都用上高標準。就連本田被人詬病的隔音謳歌也能做得安靜。

    被拉高轉的本田發動機“爆tec”時的感覺聲音和動力都有着明顯變化,讓人為之興奮,但開着謳歌TLX-L卻沒有這種感覺。難道就因為高端車型而被“技術”隔絕?

    其實這種“爆tec”的感覺在自主品牌的渦輪車上有着“更好的體現”。只不過我們吐槽它而已,這一技術就是渦輪遲滯。體驗過大部分自主品牌渦輪車,輕踩油門不去,踩重一點像是被踢出去的感覺。這種感覺比“爆tec”還爽快。

    總結:高轉“爆tec”還是低轉渦輪介入明顯,都使得發動機動力輸出沒那麼“線性”。只是拉高轉的時候,亢奮的聲音和動力的凸顯使得“爆tec”的感覺被神化。渦輪介入明顯,其實就是“爆tec”時動力凸顯的一部分,只是沒有亢奮的聲音罷了。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

  • 深入理解React:懶加載(lazy)實現原理

    目錄

    • 代碼分割
    • React的懶加載
      • import() 原理
      • React.lazy 原理
      • Suspense 原理
    • 參考

    1.代碼分割

    (1)為什麼要進行代碼分割?

    現在前端項目基本都採用打包技術,比如 Webpack,JS邏輯代碼打包後會產生一個 bundle.js 文件,而隨着我們引用的第三方庫越來越多或業務邏輯代碼越來越複雜,相應打包好的 bundle.js 文件體積就會越來越大,因為需要先請求加載資源之後,才會渲染頁面,這就會嚴重影響到頁面的首屏加載。

    而為了解決這樣的問題,避免大體積的代碼包,我們則可以通過技術手段對代碼包進行分割,能夠創建多個包並在運行時動態地加載。現在像 Webpack、 Browserify等打包器都支持代碼分割技術。

    (2)什麼時候應該考慮進行代碼分割?

    這裏舉一個平時開發中可能會遇到的場景,比如某個體積相對比較大的第三方庫或插件(比如JS版的PDF預覽庫)只在單頁應用(SPA)的某一個不是首頁的頁面使用了,這種情況就可以考慮代碼分割,增加首屏的加載速度。

    2.React的懶加載

    示例代碼:

    import React, { Suspense } from 'react';
    
    const OtherComponent = React.lazy(() => import('./OtherComponent'));
    
    function MyComponent() {
      return (
        <div>
          <Suspense fallback={<div>Loading...</div>}>
            <OtherComponent />
          </Suspense>
        </div>
      );
    }
    

    如上代碼中,通過 import() React.lazySuspense 共同一起實現了 React 的懶加載,也就是我們常說了運行時動態加載,即 OtherComponent 組件文件被拆分打包為一個新的包(bundle)文件,並且只會在 OtherComponent 組件渲染時,才會被下載到本地。

    那麼上述中的代碼拆分以及動態加載究竟是如何實現的呢?讓我們來一起探究其原理是怎樣的。

    import() 原理

    import() 函數是由TS39提出的一種動態加載模塊的規範實現,其返回是一個 promise。在瀏覽器宿主環境中一個import()的參考實現如下:

    function import(url) {
      return new Promise((resolve, reject) => {
        const script = document.createElement("script");
        const tempGlobal = "__tempModuleLoadingVariable" + Math.random().toString(32).substring(2);
        script.type = "module";
        script.textContent = `import * as m from "${url}"; window.${tempGlobal} = m;`;
    
        script.onload = () => {
          resolve(window[tempGlobal]);
          delete window[tempGlobal];
          script.remove();
        };
    
        script.onerror = () => {
          reject(new Error("Failed to load module script with URL " + url));
          delete window[tempGlobal];
          script.remove();
        };
    
        document.documentElement.appendChild(script);
      });
    }
    

    當 Webpack 解析到該import()語法時,會自動進行代碼分割。

    React.lazy 原理

    以下 React 源碼基於 16.8.0 版本

    React.lazy 的源碼實現如下:

    export function lazy<T, R>(ctor: () => Thenable<T, R>): LazyComponent<T> {
      let lazyType = {
        $$typeof: REACT_LAZY_TYPE,
        _ctor: ctor,
        // React uses these fields to store the result.
        _status: -1,
        _result: null,
      };
    
      return lazyType;
    }
    

    可以看到其返回了一個 LazyComponent 對象。

    而對於 LazyComponent 對象的解析:

    ...
    case LazyComponent: {
      const elementType = workInProgress.elementType;
      return mountLazyComponent(
        current,
        workInProgress,
        elementType,
        updateExpirationTime,
        renderExpirationTime,
      );
    }
    ...
    
    function mountLazyComponent(
      _current,
      workInProgress,
      elementType,
      updateExpirationTime,
      renderExpirationTime,
    ) { 
      ...
      let Component = readLazyComponentType(elementType);
      ...
    }
    
    // Pending = 0, Resolved = 1, Rejected = 2
    export function readLazyComponentType<T>(lazyComponent: LazyComponent<T>): T {
      const status = lazyComponent._status;
      const result = lazyComponent._result;
      switch (status) {
        case Resolved: {
          const Component: T = result;
          return Component;
        }
        case Rejected: {
          const error: mixed = result;
          throw error;
        }
        case Pending: {
          const thenable: Thenable<T, mixed> = result;
          throw thenable;
        }
        default: { // lazyComponent 首次被渲染
          lazyComponent._status = Pending;
          const ctor = lazyComponent._ctor;
          const thenable = ctor();
          thenable.then(
            moduleObject => {
              if (lazyComponent._status === Pending) {
                const defaultExport = moduleObject.default;
                lazyComponent._status = Resolved;
                lazyComponent._result = defaultExport;
              }
            },
            error => {
              if (lazyComponent._status === Pending) {
                lazyComponent._status = Rejected;
                lazyComponent._result = error;
              }
            },
          );
          // Handle synchronous thenables.
          switch (lazyComponent._status) {
            case Resolved:
              return lazyComponent._result;
            case Rejected:
              throw lazyComponent._result;
          }
          lazyComponent._result = thenable;
          throw thenable;
        }
      }
    }
    

    注:如果 readLazyComponentType 函數多次處理同一個 lazyComponent,則可能進入Pending、Rejected等 case 中。

    從上述代碼中可以看出,對於最初 React.lazy() 所返回的 LazyComponent 對象,其 _status 默認是 -1,所以首次渲染時,會進入 readLazyComponentType 函數中的 default 的邏輯,這裏才會真正異步執行 import(url)操作,由於並未等待,隨後會檢查模塊是否 Resolved,如果已經Resolved了(已經加載完畢)則直接返回moduleObject.default(動態加載的模塊的默認導出),否則將通過 throw 將 thenable 拋出到上層。

    為什麼要 throw 它?這就要涉及到 Suspense 的工作原理,我們接着往下分析。

    Suspense 原理

    由於 React 捕獲異常並處理的代碼邏輯比較多,這裏就不貼源碼,感興趣可以去看 throwException 中的邏輯,其中就包含了如何處理捕獲的異常。簡單描述一下處理過程,React 捕獲到異常之後,會判斷異常是不是一個 thenable,如果是則會找到 SuspenseComponent ,如果 thenable 處於 pending 狀態,則會將其 children 都渲染成 fallback 的值,一旦 thenable 被 resolve 則 SuspenseComponent 的子組件會重新渲染一次。

    為了便於理解,我們也可以用 componentDidCatch 實現一個自己的 Suspense 組件,如下:

    class Suspense extends React.Component {
      state = {
        promise: null
      }
    
      componentDidCatch(err) {
        // 判斷 err 是否是 thenable
        if (err !== null && typeof err === 'object' && typeof err.then === 'function') {
          this.setState({ promise: err }, () => {
            err.then(() => {
              this.setState({
                promise: null
              })
            })
          })
        }
      }
    
      render() {
        const { fallback, children } = this.props
        const { promise } = this.state
        return <>{ promise ? fallback : children }</>
      }
    }
    

    小結

    至此,我們分析完了 React 的懶加載原理。簡單來說,React利用 React.lazyimport()實現了渲染時的動態加載 ,並利用Suspense來處理異步加載資源時頁面應該如何显示的問題。

    3.參考

    代碼分割– React

    動態import – MDN – Mozilla

    proposal-dynamic-import

    React Lazy 的實現原理

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 如何使用 Shell 腳本來查看多個服務器的端口是否打開?

    如何使用 Shell 腳本來查看多個服務器的端口是否打開?

    我們在進行服務器配置的時候,經常要查看服務器的某個端口是否已經開放。如果服務器只有一兩台的話,那很好辦,只需要使用 nc 命令一個個查看即可。

    但是,如果你的服務器是個集群,有很多台呢?那如果還一個個手動去檢查的話,效率肯定是無比低下的,年底裁員名單里肯定有你。

    在這種情況下,我們完全可以使用 Shell 腳本配合 nc 命令來達到我們的目的。而且,不管服務器有幾台,需要檢查的端口有幾個,都可以實現這樣的目標。

    在本文里,我們用 Shell 腳本來實現兩個需求:

    • 掃描多台服務器的一個端口是否打開
    • 掃描多台服務器的多個端口是否打開

    在開始之前,我們先來了解一下 nc 命令。

    nc 命令簡介

    nc 是英文單詞 netcat 的縮寫,它是通過使用 TCP 或 UDP 的網絡協議的連接來讀或寫數據,可以直接被第三方程序或腳本直接調用。

    同時,它是一款功能非常強大的網絡調試工具,因為它可以創建幾乎所有你所需要的連接方式。

    nc 工具主要有三種功能模式:連接模式、監聽模式、通道模式。它的一般使用格式如下:

    $ nc [-options] [HostName or IP] [PortNumber]
    

    接下來,我們就用 Shell 腳本結合 nc 命令來實現我們的兩個需求。

    1. 掃描多台服務器的一個端口是否打開

    在這裏,我們先把需要查詢的所有服務器地址全部放在一個 server-list.txt 文件里,每個地址單獨一行,如下:

    # cat server-list.txt
    192.168.1.2
    192.168.1.3
    192.168.1.4
    192.168.1.5
    192.168.1.6
    192.168.1.7
    

    然後,我們再用 for 循環依次掃描 server-list.txt 里對應服務器的端口是否打開。在這裏,我們掃描 22 端口是否打開。

    # vi port_scan.sh
    
    #!/bin/sh
    for server in `more server-list.txt`
    do
    #echo $i
    nc -zvw3 $server 22
    done
    

    最後,我們給這個腳本賦予可執行權限即可。

    $ chmod +x port_scan.sh
    

    之後,我們就可以用這個腳本來自動依次檢查多個服務器的 22 端口是否已打開。

    # sh port_scan.sh
    
    Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
    

    2. 掃描多台服務器的多個端口是否打開

    在這裏,我們同樣把需要查詢的所有服務器地址全部放在一個 server-list.txt 文件里,每個地址單獨一行。這裏就不重複演示了。

    與此同時,我們也把需要查詢的服務器端口放在另一個 port-list.txt 文件里,每個端口單獨一行,如下所示:

    # cat port-list.txt
    22
    80
    

    然後,我們再用 for 循環依次掃描 server-list.txt 里對應服務器 port-list.txt 所列的端口是否打開。注意,這裏用到了兩個 for 循環,第一層是服務器列表,第二層是端口列表。

    # vi multiple_port_scan.sh
    
    #!/bin/sh
    for server in `more server-list.txt`
    do
    for port in `more port-list.txt`
    do
    #echo $server
    nc -zvw3 $server $port
    echo ""
    done
    done
    

    最後,我們給這個腳本賦予可執行權限即可。

    $ chmod +x multiple_port_scan.sh
    

    之後,我們就可以用這個腳本來自動依次檢查多個服務器的多個端口是否已打開。

    # sh multiple_port_scan.sh
    Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.2 80 port [tcp/http] succeeded!
    
    Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.3 80 port [tcp/http] succeeded!
    
    Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.4 80 port [tcp/http] succeeded!
    
    Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.5 80 port [tcp/http] succeeded!
    
    Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.6 80 port [tcp/http] succeeded!
    
    Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
    Connection to 192.168.1.7 80 port [tcp/http] succeeded!
    

    公眾號:良許Linux

    有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※推薦評價好的iphone維修中心

  • Spark文檔閱讀之二:Programming Guides – Quick Start

    Spark文檔閱讀之二:Programming Guides – Quick Start

    Quick Start: https://spark.apache.org/docs/latest/quick-start.html

     

    在Spark 2.0之前,Spark的編程接口為RDD (Resilient Distributed Dataset)。而在2.0之後,RDDs被Dataset替代。Dataset很像RDD,但是有更多優化。RDD仍然支持,不過強烈建議切換到Dataset,以獲得更好的性能。 RDD文檔: https://spark.apache.org/docs/latest/rdd-programming-guide.html Dataset文檔: https://spark.apache.org/docs/latest/sql-programming-guide.html  

    一、最簡單的Spark Shell交互分析

    scala> val textFile = spark.read.textFile("README.md")   # 構建一個Dataset
    textFile: org.apache.spark.sql.Dataset[String] = [value: string]
    
    scala> textFile.count()  # Dataset的簡單計算
    res0: Long = 104 
    
    scala> val linesWithSpark = textFile.filter(line => line.contain("Spark"))  # 由現有Dataset生成新Dataset
    res1: org.apache.spark.sql.Dataset[String] = [value: string]
    # 等價於:
    # res1 = new Dataset()
    # for line in textFile:
    #     if line.contain("Spark"):
    #         res1.append(line)
    # linesWithSpark = res1
    
    scala> linesWithSpark.count()
    res2: Long = 19
    
    # 可以將多個操作串行起來
    scala> textFile.filter(line => line.contain("Spark")).count()
    res3: Long = 19

     

    進一步的Dataset分析:

    scala> textFile.map(line => line.split(" ").size).reduce((a,b) => if (a > b) a else b)
    res12: Int = 16
    # 其實map和reduce就是兩個普通的算子,不要被MapReduce中一個map配一個reduce、先map后reduce的思想所束縛
    # map算子就是對Dataset的元素X計算fun(X),並且將所有f(X)作為新的Dataset返回
    # reduce算子其實就是通過兩兩計算fun(X,Y)=Z,將Dataset中的所有元素歸約為1個值
    
    # 也可以引入庫進行計算
    scala> import java.lang.Math
    import java.lang.Math
    
    scala> textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))
    res14: Int = 16
    
    # 還可以使用其他算子
    scala> val wordCounts = textFile.flatMap(line => line.split(" ")).groupByKey(identity).count()
    
    # flatMap算子也是對Dataset的每個元素X執行fun(X)=Y,只不過map的res是
    #     res.append(Y),如[[Y11, Y12], [Y21, Y22]],結果按元素區分
    # 而flatMap是
    #     res += Y,如[Y11, Y12, Y21, Y22],各元素結果合在一起
    
    # groupByKey算子將Dataset的元素X作為參數傳入進行計算f(X),並以f(X)作為key進行分組,返回值為KeyValueGroupedDataset類型
    # 形式類似於(key: k; value: X1, X2, ...),不過KeyValueGroupedDataset不是一個Dataset,value列表也不是一個array
    # 注意:這裏的textFile和textFile.flatMap都是Dataset,不是RDD,groupByKey()中可以傳func;如果以sc.textFile()方法讀文件,得到的是RDD,groupByKey()中間不能傳func
    
    # identity就是函數 x => x,即返回自身的函數
    
    # KeyValueGroupedDataset的count()方法返回(key, len(value))列表,結果是Dataset類型
    
    scala> wordCounts.collect()
    res37: Array[(String, Long)] = Array((online,1), (graphs,1), ...
    # collect操作:將分佈式存儲在集群上的RDD/Dataset中的所有數據都獲取到driver端

     

    數據的cache:

    scala> linesWithSpark.cache()  # in-memory cache,讓數據在分佈式內存中緩存
    res38: linesWithSpark.type = [value: string]
    
    scala> linesWithSpark.count()
    res41: Long = 19

     

    二、最簡單的獨立Spark任務(spark-submit提交)

    需提前安裝sbt,sbt是scala的編譯工具(Scala Build Tool),類似java的maven。 brew install sbt   1)編寫SimpleApp.scala

    import org.apache.spark.sql.SparkSession
    
    object SimpleApp {
        def main(args: Array[String]) {
            val logFile = "/Users/dxm/work-space/spark-2.4.5-bin-hadoop2.7/README.md"
            val spark = SparkSession.builder.appName("Simple Application").getOrCreate()
            val logData = spark.read.textFile(logFile).cache()
            val numAs = logData.filter(line => line.contains("a")).count()  # 包含字母a的行數
            val numBs = logData.filter(line => line.contains("b")).count()  # 包含字母b的行數
            println(s"Lines with a: $numAs, Lines with b: $numBs")
            spark.stop()
        }
    }

     

    2)編寫sbt依賴文件build.sbt

    name := "Simple Application"
    
    version := "1.0"
    
    scalaVersion := "2.12.10"
    
    libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.5"

     

    其中,”org.apache.spark” %% “spark-sql” % “2.4.5”這類庫名可以在網上查到,例如https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.10/1.0.0

     

    3)使用sbt打包 目錄格式如下,如果SimpleApp.scala和build.sbt放在一個目錄下會編不出來

    $ find .
    .
    ./build.sbt
    ./src
    ./src/main
    ./src/main/scala
    ./src/main/scala/SimpleApp.scala

     

    sbt目錄格式要求見官方文檔 https://www.scala-sbt.org/1.x/docs/Directories.html

    src/
      main/
        resources/
           <files to include in main jar here>
        scala/
           <main Scala sources>
        scala-2.12/
           <main Scala 2.12 specific sources>
        java/
           <main Java sources>
      test/
        resources
           <files to include in test jar here>
        scala/
           <test Scala sources>
        scala-2.12/
           <test Scala 2.12 specific sources>
        java/
           <test Java sources>

     

    使用sbt打包

    # 打包
    $ sbt package
    ...
    [success] Total time: 97 s (01:37), completed 2020-6-10 10:28:24
    # jar包位於 target/scala-2.12/simple-application_2.12-1.0.jar

     

    4)提交並執行Spark任務

    $ bin/spark-submit --class "SimpleApp" --master spark://xxx:7077 ../scala-tests/SimpleApp/target/scala-2.12/simple-application_2.12-1.0.jar
    # 報錯:Caused by: java.lang.ClassNotFoundException: scala.runtime.LambdaDeserialize
    # 參考:https://stackoverflow.com/questions/47172122/classnotfoundexception-scala-runtime-lambdadeserialize-when-spark-submit
    # 這是spark版本和scala版本不匹配導致的

     

    查詢spark所使用的scala的版本

    $ bin/spark-shell --master spark://xxx:7077
    
    scala> util.Properties.versionString
    res0: String = version 2.11.12

     

    修改build.sbt: scalaVersion := “2.11.12” 從下載頁也可驗證,下載的spark 2.4.5使用的是scala 2.11  

     

    重新sbt package,產出位置變更為target/scala-2.11/simple-application_2.11-1.0.jar 再次spark-submit,成功

     

    $ bin/spark-submit --class "SimpleApp" --master spark://xxx:7077 ../scala-tests/SimpleApp/target/scala-2.11/simple-application_2.11-1.0.jar 
    Lines with a: 61, Lines with b: 30

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準