天池新人实战赛之[离线赛]-初体验-Spark处理

写在前面

这种直接提交购物车的方式不涉及任何算法,后续我会逐渐学习引入机器学习的相关算法,从而更好的对结果进行预测。截止 2019-08-07排名77/11111

package src.main.scala.com.csylh.august.tianchi.dataclearer

import org.apache.spark.sql.{SaveMode, SparkSession}

/**
  * 注意这个
  */
import org.apache.spark.sql.functions.split


/**
  * Description: TODO
  *
  * @Author: 留歌36
  * @Date: 2019-08-01 10:57
  */
object SourceDataETLApp {
  def main(args: Array[String]): Unit = {
    val localMasterURL = "local[2]"
    val clusterMasterRL = ""

    // 面向SparkSession编程
    val spark = SparkSession.builder()
      .master(localMasterURL)
      .appName("SourceDataETLApp")
      .getOrCreate()

    val itemData = "/Users/liuge36/Desktop/fresh_comp_offline/tianchi_fresh_comp_train_item.csv"
    val userData = "/Users/liuge36/Desktop/fresh_comp_offline/tianchi_fresh_comp_train_user.csv"

    /**
      *  共计: 620918
      * |  item_id|item_geohash|item_category|
      * +---------+------------+-------------+
      * |100002303|        null|         3368|
      *
      */
    // 读取商品子集(P)
    val train_item =spark.read.option("header",true).csv(itemData)
    // 查看商品子集数据数量
//    println(train_item.count())
    // 查看前10条商品子集数据
//    train_item.show(10)

    /**
      *
      *  共计: 23 291 027
      * +--------+---------+-------------+------------+-------------+-------------+
      * | user_id|  item_id|behavior_type|user_geohash|item_category|         time|
      * +--------+---------+-------------+------------+-------------+-------------+
      * |10001082|285259775|            1|     97lk14c|         4076|2014-12-08 18|
      */
      // 读取用户行为数据
    val train_user =spark.read.option("header",true).csv(userData)
    // 查看行为数据数量
//    println(train_user.count())
    // 查看前10条行为数据
//    train_user.show(10)
    // 查看日期和行为数据
//    train_user.select("time","behavior_type").show()

    // 筛选出behavior_type==3,即加入购物车数据 659437
    val resultData = train_user.filter("behavior_type == 3")
    // 隐式转换
    import spark.implicits._

    // 筛选出12月18号一天的数据 18487 ,并仅仅获取user_id 和item_id 字段

    val saveData = resultData.withColumn("_tmp", split(resultData.col("time"), " "))
      .select($"_tmp".getItem(0).as("t1"), $"user_id", $"item_id")
      .filter("t1 == '2014-12-18' ")
      .drop("_tmp", "t1")

    // 保存数据
    saveData
      .coalesce(1)
      .write
      .option("header", "true")
      .mode(SaveMode.Overwrite)

      .csv("/Users/liuge36/Desktop/fresh_comp_offline/2")


    spark.stop()


  }

}
posted @ 2019-08-07 09:34  liuge36  阅读(90)  评论(0编辑  收藏  举报