Apache Spark 1.6.1 学习教程 - 回顾Titanic Data

这篇博客通过Apache Spark 1.6.1展示了如何处理Titanic数据集,包括数据加载、RDD转DataFrame、数据清理(如转化数值数据、填充缺失值)、特征提取(如从Name中提取Title)以及使用逻辑回归、决策树和随机森林进行初步模型训练。
摘要由CSDN通过智能技术生成

这篇博客主要是利用Titanic dataset来简单演示pyspark 1.6.1的使用方法。
这组数据比较小,训练数据只有891行,训练、测试数据可以在这里下载(train.csv, test.csv)。

内容

  1. 数据加载和转化
  2. 数据清理
  3. 特征提取
  4. 套用ml/mllib算法

1. 数据加载和转化

a. 数据加载

当我们运行pyspark之后,SparkContect (sc)就同时运行了。
我们利用sc.textFile读取csv文件,生成的数据格式为RDD。
与此同时,我们也可以使用sqlContext.read.text读取csv文件,但是生成数据格式为DataFrame。

train_path='/Users/chaoranliu/Desktop/github/kaggle/titanic/train.csv'
test_path='/Users/chaoranliu/Desktop/github/kaggle/titanic/test.csv'
# Load csv file as RDD
train_rdd = sc.textFile(train_path)
test_rdd = sc.textFile(test_path)

让我们看看前3行RDD数据:

train_rdd.take(3)

数据的结构是python list, 每一行是一个string。

  [u'PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked',
  u'1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S',
  u'2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C']
b. 转化RDD为DataFrame

Spark DataFrame 是从R data frame 和 python pandas DataFrame 得到的灵感,它是Spark 新的数据格式,在以后版本会取代RDD。它的语法与RDD不同,会更加接近R和pandas. 这里我会把RDD转化为DataFrame,以便后面的数据处理。

步骤:

  1. 去掉数据标题(第一行)
  2. 用逗号分割每行数据 并 转化为tuple
  3. 用数据标题命名数据列
# Parse RDD to DF
def parseTrain(rdd):

    # extract data header (first row)
    header = rdd.first()
    # remove header
    body = rdd.filter(lambda r: r!=header)
def parseRow(row):
        # a function to parse each text row into
        # data format
        # remove double quote, split the text row by comma
        row_list = row.replace('"','').split(",")
        # convert python list to tuple, which is
        # compatible with pyspark data structure
        row_tuple = tuple(row_list)
        return row_tuple

    rdd_parsed = body.map(parseRow)

    colnames = header.split(",")
    colnames.insert(3,'FirstName')

    return rdd_parsed.toDF(colnames)

## Parse Test RDD to DF 
def parseTest(rdd):
    header = rdd.first()
    body = rdd.filter(lambda r: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值