[DE] ML on Big data: MLlib

Pipeline的最終目的就是學會Spark MLlib,這裏先瞧瞧作到內心有數:知道以後要學什麼,怎麼學。html

首要問題

1、哪些機器學習算法能夠並行實現?

四類算法:分類、迴歸、聚類、協同過濾python

以及特徵提取、降維、數據流管理功能。mysql

後者能夠與Spark SQL完美結合,支持的算法以下:算法

 

2、何爲機器學習流水線?

Spark SQL中的DataFrame做爲數據集。sql

Transformer: 打上標籤。apache

Estimator: 訓練數據的算法。json

parameter: 參數。api

最後,經過接口將各個Transformer組裝起來構成」數據流「。app

>>> pipeline = Pipeline(stags=[stage1,stage2,stage3])

 

 

 

構建文本分類流水線

 構建評估器 

Tokenizer ----> HashingTF ----> Logistic Regression機器學習

參考:[ML] Naive Bayes for Text Classification

tokenizer = Tokenizer(inputCol = "text", outputCol = "words")
hashingTF = HashingTF(inputCol = tokenizer.getOutputCol(), outputCol = "feature")
lr = LogisticRegression(maxIter = 10, regParam = 0.001)

# 獲得一個評估器
pipeline = Pipeline(stages = [tokenizer, hashingTF, lr])

 

 訓練轉換器 

model = pipeline.fit(training)

 

 測試模型 

test = spark.createDataFrame([
  (4, "spark i j k"), 
  (5, "l m n"),
  (6, "spark hadoop spark"), 
  (7, "apache hadoop")
], ["id", "text"])

# 測試過程
prediction = moel.transform(test)

# 展現測試結果
selected = prediction.select("id", "text", "probability", "prediction")
for row in selected.collect():
  rid, text, prob, prediction = row
  print(...)

 

 

 

MLlib的算法教程

1、大數據文件加載 

 文件格式解析 

深刻分析 Parquet 列式存儲格式

 

part-00178-88b459d7-0c3a-4b84-bb5c-dd099c0494f2.c000.snappy.parquet

 

 加載文件 

Ref: pyspark系列--讀寫dataframe

1. 鏈接spark
2. 建立dataframe
  2.1. 從變量建立
  2.2. 從變量建立
  2.3. 讀取json
  2.4. 讀取csv
  2.5. 讀取MySQL
  2.6. 從pandas.dataframe建立
  2.7. 從列式存儲的parquet讀取
  2.8. 從hive讀取
3. 保存數據
  3.1. 寫到csv
  3.2. 保存到parquet
  3.3. 寫到hive
  3.4. 寫到hdfs
  3.5. 寫到mysql

 

注意,這裏的 「users.parquet」 是個文件夾!

# 讀取example下面的parquet文件
file = r"D:\apps\spark-2.2.0-bin-hadoop2.7\examples\src\main\resources\users.parquet"
df = spark.read.parquet(file) df.show()

 

 查詢數據 

Spark2.1.0+入門:讀寫Parquet(DataFrame)(Python版)

>>> parquetFileDF = spark.read.parquet("file:///usr/local/spark/examples/src/main/resources/users.parquet"
>>> parquetFileDF.createOrReplaceTempView("parquetFile") >>> namesDF = spark.sql("SELECT * FROM parquetFile") >>> namesDF.rdd.foreach(lambda person: print(person.name)) Alyssa Ben

 

 

2、AWS S3 文件處理

大文件通常都放在S3中,如何在本地遠程處理呢? 

其實AWS已經提供了方案:Amazon EMR

 

 

3、MLlib算法學習

Welcome to Spark Python API Docs!

 

Spark MLlib是Spark中專門用於處理機器學習任務的庫,但在最新的Spark 2.0中,大部分機器學習相關的任務已經轉移到Spark ML包中。

二者的區別在於MLlib是基於RDD源數據的,而ML是基於DataFrame的更抽象的概念,能夠建立包含從數據清洗到特徵工程再到模型訓練等一系列機器學習工做。

因此,將來在用Spark處理機器學習任務時,將以Spark ML爲主。

pyspark.mllib package

pyspark.ml package

 

End.

相關文章
相關標籤/搜索