庫克首度回應iCar:將尋求製造商代工蘋果汽車

近日,在接受《財富》雜誌採訪時,蘋果CEO庫克首次就iCar汽車做出回應,並向外界透露了關於蘋果汽車的相關問題。庫克稱,蘋果最終可能不會涉足製造汽車,如果真的要涉足汽車產業,可能會尋求合同製造商來代工生產,正如電腦和手機一樣。

庫克表示,現在並非將蘋果汽車計畫全盤托出的好時機,蘋果並不會涉足過多的產品,在謹慎挑選之後,談論可能比較多,但實際做的要少很多。“不過,蘋果對探索新技術,探索新產品的欲望不會停止”。庫克還稱,即使產品最終不能夠進行商業化,蘋果依舊會在團隊和研發上進行投資,這是尋找最好產品的必經之路。

 去年5月,在由Recode舉辦的 CodeConference大會上,蘋果運營高級副總裁傑夫•威廉姆斯首度承認了蘋果涉足汽車領域的事實。隨後,金融時報曝出,蘋果正在汽車行業大規模招聘,雇用了一批自動駕駛和汽車設計方面的專家加入一個絕密團隊,如賓士研發中心的老大 Johann Jungwirth 和克萊斯勒負責產品研發的高級副總裁 DougBetts。

不僅如此,蘋果還在運作一個絕密實驗室,這個位於蘋果庫比蒂諾總部附近的實驗室由之前 iPhone 產品團隊的負責人接管,這一團隊的人數在“幾十位”的量級,研發項目可能是基於 CarPlay 的軟體平臺,但是也有可能是一款與 Tesla 相抗衡的電動車的原型產品。

值得注意的是,此次庫克表達的觀點,稱蘋果可能最終不會涉足汽車製造,恰恰與此前媒體曝光的“蘋果正與高端汽車組裝廠商Magna Steyr洽談合作”的消息不謀而合。

另外,衛報此前也撰文表示,蘋果已經在開始尋找測試無人駕駛汽車的場所,其中的一處目標場所為康考斯塔交通管理局所有的 GoMentum Station。該場地此前還被用作本田、豐田、賓士的自動駕駛研發場地。

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

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

國家發改委批准萬向年產5000輛新能源客車項目

據報導,國家發改委同意萬向集團公司年產5000輛新能源客車項目。該項目總投資206093萬元,其中新增投資175534萬元,利用原有固定資產投資30559萬元。

萬向新能源汽車城和亞太智能汽車生態圈,將重新架構蕭山的新能源汽車產業版圖。而新能源汽車和機械製造兩個產業將是“十三五”期間蕭山最有望榮登“千億級”的大產業。

萬向集團在等待項目批准的同時也沒閑著,可謂萬事俱備,只欠政府批准。

最早從收購美國電池廠A123,到萬向集團A123SystemsLLC近日從Leyden能源手中購買專利,用於萬向集團的電動汽車專案。

從收購菲斯科,再到萬向集團旗下的美國菲斯科汽車技術集團正式宣佈更名為卡瑪汽車公司。去年,萬向集團旗下的Karma汽車公司宣佈與寶馬公司達成重要合作夥伴關係,Karma將結合寶馬技術資源,在未來推出一系列混合動力和純電動豪華汽車。

上汽集團與萬向集團合資成立了一家新能源客車企業,並在杭州建立新能源客車生產基地,將合作開拓國內及海外的新能源汽車市場。據透露,萬向集團在合資公司中占股51%,上汽集團占股49%,公司規劃目標年產新能源客車5000輛。

萬向集團的野心可不小,業務覆蓋乘用車的純電動、混合動力,以及新能源客車。基於萬向其背後的實力,在中國市場將有舉足輕重的地位。

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

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

G20財長會議公報提及氣候變遷 川普任內首見

摘錄自2020年2月24日中央社報導

20國集團(G20)財政部長和中央銀行總裁會議今天(24日)發表結論公報,內容提及氣候變遷。這是美國總統川普上任以來首見。但公報仍未將氣候變遷列為全球經濟面臨的一大風險。

路透社報導,G20國家幾乎全都同意將氣候變遷列入全球經濟降溫風險的清單,但遭到美國抵制。然而,美國最終同意在公報內關於「金融穩定委員會」(Financial Stability Board)工作的部分,提及氣候變遷和金融穩定的關聯。

公報寫道:「金融穩定委員會正在審視氣候變遷對金融穩定的影響。」美國財政部長梅努欽(Steven Mnuchin)則淡化這句話的重要性,表示這部分內容只是對金融穩定委員會的工作做「純粹事實」描述。

儘管如此,數名G20消息人士認為,這句話仍代表朝向進一步承認氣候變遷對經濟構成風險邁進一步。一名消息人士說,這是川普擔任美國總統期間,G20財長會議公報首次提及氣候變遷。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

研究:空污嚴重肆虐 全球人均少活三年

摘錄自2020年3月4日聯合新聞網報導

科學家今(3日)表示,空氣污染「嚴重肆虐全球」使得全球人口的平均餘命縮短近三年,且每年有880萬人因空污問題提早死亡。空污造成的提早死亡人數,遠高於瘧疾和愛滋病。

根據這些科學家在醫學期刊「心血管研究」(Cardiovascular Research)發布的研究報告,消除因燃燒煤、石油和天然氣所釋出的有毒物質和會造成肺阻塞的微粒,將能使人類平均餘命增加整整一年。

研究結果顯示,與其他造成人類提早死亡的因素相比,空污每年造成的提早死亡人數比瘧疾高出19倍,比愛滋病高出9倍,也比酒精造成的提早死亡人數高出3倍。

亞洲是受空污影響最嚴重地區。空污使中國人平均餘命減少4.1年,印度人減少3.9年,巴基斯坦人減少3.8年。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

研究:狗鼻頭如有紅外線 能從溫變察覺動物接近

摘錄自2020年3月4日中央通訊社報導

根據刊登在科學期刊「科學報告」(Scientific Reports)的研究,科學家發現,狗鼻沒有毛髮覆蓋的濕潤鼻頭充滿神經末梢,具有紅外線感測器般的功能。

研究的主要作者巴林特(Anna Balint)說:「狗可以感覺到(動物)溫暖的軀體發散出來的熱度,或是四周溫度不特別高;並能夠依據這樣的訊息做出行為反應。」巴林特表示,從狗的腦部斷層掃描來看,當牠們周遭出現溫度比氣溫高的物體時,狗的腦部活動會變得更旺盛。

隆德大學感官科學家克羅格(Ronald Kroger)指出:「其他肉食動物可能也有類似這種紅外線感測器的器官功能。這項發現開啟了掠食性動物和獵物間關係研究的新篇章。」

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

寶馬豐田或將合作開發新能源汽車

寶馬和豐田公司多年來一直在燃料電池技術和汽車羽量級元件方面有著密切合作,未來很有可能合作研發跑車,各自品牌也將通過這次合作推出新車型。在日內瓦車展前,豐田公司集團執行副總裁迪迪爾•勒羅伊就公開表示,目前公司的三個項目都在順利進行中,豐田和寶馬兩大公司都期待在研發跑車這個專案上有所合作。

勒羅伊說道:“雙方公司都在積極促成合作成功,我們都希望可以研發出一款跑車。我們已確定車身架構以及所使用的動力系統。現在我們只需確定啟動項目的時間。”勒羅伊並沒有對外透露可能的時間。

去年豐田汽車在歐洲的銷量占生產總量的70%。豐田公司表示今年希望可以通過增加兩款車型來提高銷售量,兩款車型分別為土耳其工廠製造的C-HR以及在俄羅斯裝配的RAV4。范•吉爾表示公司致力於發展開拓俄羅斯市場,儘管目前挑戰還很嚴峻。2015年豐田俄羅斯分公司銷售額直降36%,僅銷售160萬輛汽車。
 

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

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

寶馬未來百年發力電動車 將在中國實現“國產”

德國慕尼克報導寶馬集團於日前舉辦百年慶典之際,不僅宣佈企業正式進入下一個百年,同時寶馬集團董事長科魯格先生還表示:“我們在多種技術上進行投資,並持續在電動化領域的投入。”根據寶馬集團的規劃,未來每一款產品都會推出插電式混合動力車型。

對於寶馬在華新能源佈局,寶馬集團大中華區總裁兼首席執行官康思遠先生于近日在慕尼克的寶馬總部與車王雜誌溝通時透露:“未來我們將推出更多插電式混合動力車型,寶馬在華的瀋陽工廠正在建設高壓電池中心,是我們為長期發展所做出的投資。”這也將成為國內首個在華建設動力電池的豪華車製造商,並為後續的寶馬插電式混合動力車型提供電池。目前,寶馬已在華投產首款插電式混合動力車型530Le,後續有望再基於2系旅行車、新3系以及全新X1打造的3款國產插電混合動力車。

根據寶馬的新車規劃,全新一代X1將在2016年中實現投產,這款SUV將推出標準軸距版和長軸距版,其中長軸距版將推出三排七座的車型。此外,全新X1還將推出一款插電混動版車型,網通社從國家工商行政管理總局商標局獲悉,寶馬股份公司已在華註冊了“xDrive25Le”商標。其中xDrive25Le中“Le”是指加長版插電式混合動力車,與5系插電混動版530Le的含義相同。新車將搭載由1.5升三缸渦輪增壓汽油發動機和一台後置電動機組成混動系統,總功率輸出可達142千瓦,預計綜合油耗將保持2L左右的水準。

今年3月21日,創新寶馬2系旅行車將實現在華投產上市,基於新車型所打造的插電混動版本也有望投產。現階段,寶馬2系旅行車的插電混動版(225xe)已在海外推出,並搭載的混動系統由1.5T發動機和一款動力輸出可達65千瓦和165牛米電動機組成,當發動機和電動機同時做功時,這套插電式混合動力系統的綜合最大功率為165千瓦,峰值扭矩達到385牛米,百公里綜合油耗僅在2L左右。

除2系旅行車和全新X1之外,目前在華投產的3系轎車也有望推出插電混合動力版車型。此前寶馬已在國際車展上發佈了3系的插電式混合動力車型330e。新車在動力上採用的2.0T+電動機的插電混動系統,最大綜合功率可達到185千瓦,峰值扭矩則為420牛米。百公里綜合油耗僅為2L,與現款3系同搭載2.0T發動機的320i車型6.7L/100km相比,油耗下降了約70%。

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

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

文件上傳

文件上傳是 Web 開發常見需求,上傳文件需要用到文件輸入框,如果給文件輸入框添加一個 multiple 屬性則可以一次選擇多個文件(不支持的瀏覽器會自動忽略這個屬性)

<input multiple type="file">

點擊這個輸入框就可以打開瀏覽文件對話框選擇文件了,一般一個輸入框上傳一個文件就行,要上傳多個文件也可以用多個輸入框來處理,這樣做是為了兼容那些不支持 multiple 屬性的瀏覽器,同時用戶一般也不會選擇多個文件

基本上傳方式

當把文件輸入框放入表單中,提交表單的時候即可將選中的文件一起提交上傳到服務器,需要注意的是由於提交的表單中包含文件,因此要修改一下錶單元素的 enctype 屬性為 multipart/form-data

<form action="#" enctype="multipart/form-data" method="post">
  <input name="file" type="file">
  <button type="submit">Upload</button>
</form>

這樣上傳方式是傳統的同步上傳,上傳的文件如果很大,往往需要等待很久,上傳完成后頁面還會重新加載,並且必須等待上傳完成后才能繼續操作

早期的瀏覽器並不支持異步上傳,不過可以使用 iframe 來模擬,在頁面中隱藏一個 <iframe> 元素,指定一個 name 值,同時將 <form> 元素的 target 屬性值指定為 <iframe> 元素的 name 屬性的值,將兩者關聯起來

<form action="#" enctype="multipart/form-data" method="post" target="upload-frame">
  <input name="file" type="file">
  <button type="submit">Upload</button>
</form>
<iframe id="upload-frame" name="upload-frame" src="about:blank" style="display: none;"></iframe>

這樣在提交表單上傳的時候,頁面就不會重新加載了,取而代之的是 iframe 重新加載了,不過 iframe 原本就是隱藏的,即使重新加載也不會感知到

訪問文件

File API 提供了訪問文件的能力,通過輸入框的 files 屬性訪問,這會得到一個 FileList,這是一個集合,如果只選擇了一個文件,那麼集合中的第一個元素就是這個文件

var input = document.querySelector('input[type="file"]')
var file = input.files[0]

console.log(file.name) // 文件名稱
console.log(file.size) // 文件大小
console.log(file.type) // 文件類型

支持 File API 的瀏覽器可以參考

Ajax 上傳

由於可以通過 File API 直接訪問文件內容,再結合 XMLHttpRequest 對象直接將文件上傳,將其作為參數傳給 XMLHttpRequest 對象的 send 方法即可

var xhr = new XMLHttpRequest()
xhr.open('POST', '/upload/url', true)
xhr.send(file)

不過一些原因不建議直接這樣傳遞文件,而是使用 FormData 對象來包裝需要上傳的文件,FormData 是一個構造函數,使用的時候先 new 一個實例,然後通過實例的 append 方法向其中添加數據,直接把需要上傳的文件添加進去

var formData = new FormData()
formData.append('file', file, file.name) // 第 3 個參數是文件名稱
formData.append('username', 'Mary') // 還可以添加額外的參數

甚至也可以直接把表單元素作為實例化參數,這樣整個表單中的數據就全部包含進去了

var formData = new FormData(document.querySelector('form'))

數據準備好后,就是上傳了,同樣是作為參數傳給 XMLHttpRequest 對象的 send 方法

var xhr = new XMLHttpRequest()
xhr.open('POST', '/upload/url', true)
xhr.send(formData)

監測上傳進度

XMLHttpRequest 對象還提供了一個 progress 事件,基於這個事件可以知道上傳進度如何

var xhr = new XMLHttpRequest()
xhr.open('POST', '/upload/url', true)
xhr.upload.onprogress = progressHandler // 這個函數接下來定義

上傳的 progress 事件由 xhr.upload 對象觸發,在事件處理程序中使用這個事件對象的 loaded(已上傳字節數) 和 total(總數) 屬性來計算上傳的進度

function progressHandler(e) {
  var percent = Math.round((e.loaded / e.total) * 100)
}

上面的計算會得到一個表示完成百分比的数字,不過這兩個值也不一定總會有,保險一點先判斷一下事件對象的 lengthComputable 屬性

function progressHandler(e) {
  if (e.lengthComputable) {
    var percent = Math.round((e.loaded / e.total) * 100)
  }
}

支持 Ajax 上傳的瀏覽器可以參考

分割上傳

使用文件對象的 slice 方法可以分割文件,給該方法傳遞兩個參數,一個起始位置和一個結束位置,這會返回一個新的 Blob 對象,包含原文件從起始位置到結束位置的那一部分(文件 File 對象其實也是 Blob 對象,這可以通過 file instanceof Blob 確定,Blob 是 File 的父類)

var blob = file.slice(0, 1024) // 文件從字節位置 0 到字節位置 1024 那 1KB

將文件分割成幾個 Blob 對象分別上傳就能實現將大文件分割上傳

function upload(file) {
  let formData = new FormData()
  formData.append('file', file)
  let xhr = new XMLHttpRequest()
  xhr.open('POST', '/upload/url', true)
  xhr.send(formData)
}

var blob = file.slice(0, 1024)
upload(blob) // 上傳第一部分

var blob2 = file.slice(1024, 2048)
upload(blob2) // 上傳第二部分

// 上傳剩餘部分

通常用一個循環來處理更方便

var pos = 0 // 起始位置
var size = 1024 // 塊的大小

while (pos < file.size) {
  let blob = file.slice(pos, pos + size) // 結束位置 = 起始位置 + 塊大小

  upload(blob)
  pos += size // 下次從結束位置開始繼續分割
}

服務器接收到分塊文件進行重新組裝的代碼就不在這裏展示了

使用這種方式上傳文件會一次性發送多個 HTTP 請求,那麼如何處理這種多個請求同時發送的情況呢?方法有很多,可以用 Promise 來處理,讓每次上傳都返回一個 promise 對象,然後用 Promise.all 方法來合併處理,Promise.all 方法接受一個數組作為參數,因此將每次上傳返回的 promise 對象放在一個數組中

var promises = []

while (pos < file.size) {
  let blob = file.slice(pos, pos + size)

  promises.push(upload(blob)) // upload 應該返回一個 promise
  pos += size
}

同時改造一下 upload 函數使其返回一個 promise

function upload(file) {
  return new Promise((resolve, reject) => {
    let formData = new FormData()
    formData.append('file', file)
    let xhr = new XMLHttpRequest()
    xhr.open('POST', '/upload/url', true)
    xhr.onload = () => resolve(xhr.responseText)
    xhr.onerror = () => reject(xhr.statusText)
    xhr.send(formData)
  })
}

當一切完成后

Promise.all(promises).then((response) => {
  console.log('Upload success!')
}).catch((err) => {
  console.log(err)
})

支持文件分割的瀏覽器可以參考

判斷一下文件對象是否有該方法就能知道瀏覽器是否支持該方法,對於早期的部分版本瀏覽器需要加上對應的瀏覽器廠商前綴

var slice = file.slice || file.webkitSlice || file.mozSlice

if (slice) {
  let blob = slice.call(file, 0, 1024) // call
  upload(blob)
} else {
  upload(file) // 不支持分割就只能直接上傳整個文件了,或者提示文件過大
}

拖拽上傳

通過拖拽 API 可以實現拖拽文件上傳,默認情況下,拖拽一個文件到瀏覽器中,瀏覽器會嘗試打開這個文件,要使用拖拽功能需要阻止這個默認行為

document.addEventListener('dragover', function(e) {
  e.preventDefault()
  e.stopPropagation()
})

任意指定一個元素來作為釋放拖拽的區域,給一個元素綁定 drop 事件

var element = document.querySelector('label')
element.addEventListener('drop', function(e) {
  e.preventDefault()
  e.stopPropagation()

  // ...
})

通過該事件對象的 dataTransfer 屬性獲取文件,然後上傳即可

var file = e.dataTransfer.files[0]
upload(file) // upload 函數前面已經定義

選擇類型

給文件輸入框添加 accept 屬性即可指定選擇文件的類型,比如要選擇 png 格式的圖片,則指定其值為 image/png,如果要允許選擇所有類型的圖片,就是 image/*

<input accept="image/*" type="file">

添加 capture 屬性可以調用設備機能,比如 capture="camera" 可以調用相機拍照,不過這並不是一個標準屬性,不同設備實現方式也不一樣,需要注意

<input accept="image/*" capture="camera" type="file">

經測 iOS 設備添加該屬性后只能拍照而不能從相冊選擇文件了,所以判斷一下

if (iOS) { // iOS 用 navigator.userAgent 判斷
  input.removeAttribute('capture')
}

不支持的瀏覽器會自動忽略這些屬性

自定義樣式

文件輸入框在各個瀏覽器中呈現的樣子都不大相同,而且給 input 定義樣式也不是那麼方便,如果有需要應用自定義樣式,有一個技巧,可以用一個 label 關聯到這個文件輸入框,當點擊這個 label 元素的時候就會觸發文件輸入框的點擊,打開瀏覽文件的對話框,相當於點擊了文件輸入框一樣的效果

<label for="file-input"></label>
<input id="file-input" style="clip: rect(0,0,0,0); position: absolute;" type="file">

這時就可以將原本的文件輸入框隱藏了,然後給 label 元素任意地應用樣式,畢竟要給 label 元素應用樣式比 input 方便得多

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?

Spark(一)—— 大數據處理入門

一、Spark介紹

Apache Spark is a fast and general-purpose cluster computing system. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set of higher-level tools including Spark SQL for SQL and structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.

Spark是一個快速且多功能的集群計算系統。它為多種不同語言提供高級API,和支持一般執行圖的優化引擎。它也有豐富的高級工具集,Spark SQL進行結構化數據的處理,MLib處理機器學習,GraphX進行圖處理,以及Spark Streaming流計算。

組成

它的主要組件有:

  • SparkCore
    • 將分佈式數據抽象為彈性分佈式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,併為運行在其上的上層組件提供API。
  • SparkSQL
    • Spark Sql 是Spark來操作結構化數據的程序包,可以讓我使用SQL語句的方式來查詢數據,Spark支持 多種數據源,包含Hive表,parquest以及JSON等內容。
  • SparkStreaming
    • 是Spark提供的實時數據進行流式計算的組件。
  • MLlib
    • 提供常用機器學習算法的實現庫。
  • GraphX
    • 提供一個分佈式圖計算框架,能高效進行圖計算。
  • BlinkDB
    • 用於在海量數據上進行交互式SQL的近似查詢引擎。
  • Tachyon
    • 以內存為中心高容錯的的分佈式文件系統。

返回一個包含數據集前n個元素的數組

二、WordCount程序講解

編寫代碼

scala程序編寫

object WordCountDemo {

  def main(args: Array[String]): Unit = {
    //創建Spark配置對象
    val conf = new SparkConf().setMaster("local").setAppName("MyApp")
    //通過conf創建sc
    val sc = new SparkContext(conf)
    //讀取文件
    val rdd1 = sc.textFile("/Users/README.md")
    //計算
    val rdd2 = rdd1.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
    //打印
    rdd2.take(10).foreach(println)

  }

}

java程序編寫


public class WordCountJavaDemo {

    public static void main(String[] args) {
        
        SparkConf conf = new SparkConf();
        conf.setAppName("myapp").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> rdd1 = sc.textFile("/Users/README.md");
        JavaRDD<String> rdd2 = rdd1.flatMap(new FlatMapFunction<String, String>() {
            @Override
            public Iterator<String> call(String s) throws Exception {
                List<String> list = new ArrayList<>();
                String[] arr = s.split(" ");
                for (String ss : arr) {
                    list.add(ss);
                }
                return list.iterator();
            }
        });

        JavaPairRDD<String, Integer> rdd3 = rdd2.mapToPair(new PairFunction<String, String, Integer>() {

            @Override
            public Tuple2<String, Integer> call(String s) throws Exception {
                return new Tuple2<String, Integer>(s, 1);
            }

        });

        JavaPairRDD<String, Integer> rdd4 = rdd3.reduceByKey(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer v1, Integer v2) throws Exception {
                return v1 + v2;
            }
        });

        List<Tuple2<String, Integer>> list = rdd4.collect();
        for (Tuple2<String, Integer> t : list) {
            System.out.println(t._1() + " " + t._2());
        }
    }

}

三、原理介紹

RDD

  • 由一系列Partition組成
  • RDD之間有一系列依賴關係
  • RDD每個算子實際上是作用在每個Partition上
  • RDD會提供一系列最佳位置
  • 分區器是作用在KV格式的RDD上

RDD會在多個節點上存儲,就和hdfs的分佈式道理是一樣的。hdfs文件被切分為多個block存儲在各個節點上,而RDD是被切分為多個partition。不同的partition可能在不同的節點上。

Spark執行流程

1、Driver
分發task,在分發之前,會調用RDD的方法,獲取partition的位置。
將task的計算結果,拉回到Driver端
Driver是一個JVM進程

2、Worker

寬依賴、窄依賴

圖中stage2的并行度是4,也就是有4個task。

寬依賴

父RDD與子RDD,partition的關係是一對多,就是寬依賴。寬依賴於shuffle對應。

窄依賴

父RDD與子RDD,partition的關係是一對一或多對一,就是窄依賴。

四、Spark常用算子

Transformation算子

特點:懶執行

(1)map

map的輸入變換函數應用於RDD中所有元素

(2)flatMap

flatMap與map區別在於map為“映射”,而flatMap“先映射,后扁平化”,map對每一次(func)都產生一個元素,返回一個對象,而flatMap多一步就是將所有對象合併為一個對象。

(3)flatMapValues

每個元素的Value被輸入函數映射為一系列的值,然後這些值再與原RDD中的Key組成一系列新的KV對。

代碼

x = sc.parallelize([("a", ["x", "y", "z"]), ("b", ["p", "r"])])
def f(x): return x
x.flatMapValues(f).collect()

打印結果

 [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'p'), ('b', 'r')]

filter

過濾操作,滿足filter內function函數為true的RDD內所有元素組成一個新的數據集。

(4)groupByKey

主要作用是將相同的所有的鍵值對分組到一個集合序列當中,其順序是不確定的。

(5)reduceByKey

與groupByKey類似,卻有不同。如(a,1), (a,2), (b,1), (b,2)。groupByKey產生中間結果為( (a,1), (a,2) ), ( (b,1), (b,2) )。而reduceByKey為(a,3), (b,3)。

reduceByKey主要作用是聚合,groupByKey主要作用是分組。

(6)take

Action算子

特點:立即觸發執行

五、SparkSQL

介紹

Spark SQL is a Spark module for structured data processing. Unlike the basic Spark RDD API, the interfaces provided by Spark SQL provide Spark with more information about the structure of both the data and the computation being performed. Internally, Spark SQL uses this extra information to perform extra optimizations. There are several ways to interact with Spark SQL including SQL and the Dataset API. When computing a result the same execution engine is used, independent of which API/language you are using to express the computation. This unification means that developers can easily switch back and forth between different APIs based on which provides the most natural way to express a given transformation.

SparkSQL是Spark的一個用來處理結構化數據的模塊。使用類似SQL的方式訪問Hadoop,實現MR計算。

Datasets的概念

A Dataset is a distributed collection of data. Dataset is a new interface added in Spark 1.6 that provides the benefits of RDDs (strong typing, ability to use powerful lambda functions) with the benefits of Spark SQL’s optimized execution engine. A Dataset can be constructed from JVM objects and then manipulated using functional transformations (map, flatMap, filter, etc.). The Dataset API is available in Scala and Java. Python does not have the support for the Dataset API. But due to Python’s dynamic nature, many of the benefits of the Dataset API are already available (i.e. you can access the field of a row by name naturally row.columnName). The case for R is similar.

Dataset是分佈式數據集合。

DataFrames概念

A DataFrame is a Dataset organized into named columns. It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood. DataFrames can be constructed from a wide array of sources such as: structured data files, tables in Hive, external databases, or existing RDDs. The DataFrame API is available in Scala, Java, Python, and R. In Scala and Java, a DataFrame is represented by a Dataset of Rows. In the Scala API, DataFrame is simply a type alias of Dataset[Row]. While, in Java API, users need to use Dataset to represent a DataFrame.

基本使用

(1)創建DataFrames

數據

{"id":"1","name":"zhangsan","age":"12"}
{"id":"2","name":"lisi","age":"12"}
{"id":"3","name":"wangwu","age":"12"}

代碼


object SparkSqlDemo {

  def main(args: Array[String]): Unit = {

    //創建Spark配置對象
    val conf = new SparkConf().setMaster("local[4]").setAppName("MyApp");

    val spark = SparkSession
      .builder()
      .appName("Spark SQL basic example")
      .config(conf)
      .getOrCreate()

    val df = spark.read.json("/Users/opensource/dev-problem/source/people_sample_json.json");
    df.show()

  }

}

(2)查詢

val df = spark.read.json("/Users/fangzhijie/opensource/dev-problem/source/people_sample_json.json");
df.createOrReplaceTempView("people")
val sqlDF = spark.sql("SELECT * FROM people WHERE name = 'zhangsan'")
sqlDF.show()

六、SparkStreaming

介紹

Spark Streaming is an extension of the core Spark API that enables scalable, high-throughput, fault-tolerant stream processing of live data streams. Data can be ingested from many sources like Kafka, Flume, Kinesis, or TCP sockets, and can be processed using complex algorithms expressed with high-level functions like map, reduce, join and window. Finally, processed data can be pushed out to filesystems, databases, and live dashboards. In fact, you can apply Spark’s machine learning and graph processing algorithms on data streams.

基本使用

(1)簡單使用


object SparkStreamingDemo {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
    //創建Spark流上下文
    val ssc = new StreamingContext(conf, Seconds(1))
    //創建Socket文本流
    val lines = ssc.socketTextStream("localhost", 9999)
    val words = lines.flatMap(_.split(" "))

    val pairs = words.map(word => (word, 1))
    val wordCounts = pairs.reduceByKey(_ + _)

    // Print the first ten elements of each RDD generated in this DStream to the console
    wordCounts.print()
    //啟動
    ssc.start()
    //等待結束
    ssc.awaitTermination()  // Wait for the computation to terminate


  }

}

使用shell命令監聽端口,輸入待計算內容

$ nc -lk 9999

原理

SparkStreaming的編程抽象是離散化流(DStream),它是一個RDD序列,每個RDD代表數據流中一個時間片內的數據。

參考文檔

《Spark快速大數據分析》

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

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

大陸寄台灣空運注意事項

大陸海運台灣交貨時間多久?

※避免吃悶虧無故遭抬價!台中搬家公司免費估價,有契約讓您安心有保障!

武漢肺炎衝擊 IEA:10餘年來石油需求將首度萎縮

摘錄自2020年3月9日中央社報導

國際能源總署(IEA)今(9日)表示,由於2019年冠狀病毒疾病(武漢肺炎)疫情拖累全球經濟活動,2020年全球石油需求料將出現10餘年來首度萎縮。

路透社報導,總部位於法國巴黎的國際能源總署表示,預期2020年石油需求為每日9990萬桶,除較先前預測值減少約100萬桶,也比去年需求少了9萬桶。石油需求將出現2009年以來首度萎縮。國際能源總署執行董事比羅爾(Fatih Birol)發布聲明表示:「這場冠狀病毒危機廣泛影響能源市場,包括煤炭、天然氣與再生能源等。但它對石油市場的衝擊尤其嚴重,因為它阻礙人員與商品流通。」

在國際能源總署大幅下修石油需求預測之際,沙烏地阿拉伯已點燃國際原油價格戰,油價下滑逾1/4,預料還將出現29年來單日最大跌幅。

能源議題
國際新聞
IEA
武漢肺炎
探勘石油

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

※專營大陸快遞台灣服務

台灣快遞大陸的貨運公司有哪些呢?