IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 2021.12.9Spark 装载CSV、JSON数据源、年龄统计UserAge实例 -> 正文阅读

[大数据]2021.12.9Spark 装载CSV、JSON数据源、年龄统计UserAge实例

目录

?装载CSV数据源

?装载JSON数据源

年龄统计UserAge实例?


?

?装载CSV数据源

import org.apache.spark
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.IntegerType
import org.apache.spark.sql._
import org.apache.spark.{SparkConf, SparkContext}

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

    val conf:SparkConf=new SparkConf().setMaster("local[*]").setAppName("cacheDemo")
    val sc:SparkContext=SparkContext.getOrCreate(conf)

//    val rdd: RDD[String] = sc.textFile("in/users.csv")
//    rdd.collect().foreach(println)
//    println(rdd.count()) //38210
//
//    val rdd2: RDD[String] = rdd.filter(x=>x.startsWith("user_id")==false)
//    rdd2.collect().foreach(println)
//    println(rdd2.count())
//    val rdd3: RDD[Array[String]] = rdd2.map(x=>x.split(","))
//    rdd3.collect().foreach(x=>println(x.toList))
    //去掉头标
//    val rdd1: RDD[String] = rdd.mapPartitionsWithIndex((index, value) => {
//      if (index == 0)
//        value.drop(1)
//      else
//        value
//    })
//    println(rdd1.count())
//    println("tag: ",rdd1.filter(x => x.startsWith("user_id") == true).count())

    val spark:SparkSession = SparkSession.builder().appName("ReadCsvSparkSession").master("local[*]").getOrCreate()
    val df: DataFrame =spark.read.format("csv").option("header","true").load("in/users.csv")
    df.printSchema()
    df.show(numRows = 10)
    val df2: DataFrame = df.select("user_id","birthyear")
    df2.show()
    df2.printSchema()

    val column:Column = df2("birthyear")
    val df3: DataFrame = df2.withColumn("birthyear",column.cast(IntegerType))  //新增一列

    println("------------------------------")
    df3.printSchema()
    df3.show()

    val column1:Column=df3("birthyear")<=1995

    //    val ds: Dataset[Row] = df3.filter(df3("birthyear")<=1995)
        val ds: Dataset[Row] = df3.filter(x=>{! x.isNullAt(1) && x.getInt(1)<1995})
    println("------------       ------------------")
    ds.printSchema()
//    ds.show()

    val df4: DataFrame = ds.withColumnRenamed("user_id","userid")
    df4.printSchema()

?装载JSON数据源

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{DoubleType, IntegerType}
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}

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

//    val conf:SparkConf=new SparkConf().setMaster("local[*]").setAppName("cacheDemo")
//    val sc:SparkContext=SparkContext.getOrCreate(conf)

    val spark:SparkSession = SparkSession.builder().appName("ReadCsvSparkSession").master("local[*]").getOrCreate()
    val sc: SparkContext = spark.sparkContext
//
//    val rdd: RDD[String] = sc.textFile("in/users.json")
//
//    import scala.util.parsing.json.JSON
//
//    val rdd2: RDD[Option[Any]] = rdd.map(x=>JSON.parseFull(x))  //json转换成 Option[Any]
//
//    rdd.collect().foreach(println)
//    rdd2.collect().foreach(println)

    val df: DataFrame = spark.read.format("json").option("head","false").load("in/user.json")
    df.printSchema()
    df.show()
    val frame: DataFrame = df.withColumn("ida", df("id").cast(IntegerType)).withColumnRenamed("name","uname")
    frame.printSchema()
    frame.show()

//    val f2: DataFrame = frame.select("ida","uname","age")
//    val frame3: DataFrame = f2.withColumn("ageinc",(f2("age")*2).cast(DoubleType)) //新加一列
//    frame3.printSchema()
//    frame3.show()

//    import spark.implicits._
//    val frame1: DataFrame = frame.select("ida", "uname", "age").withColumn("ageinc",$"age"* 2).cast(DoubleType)
//    frame1.printSchema()
//    frame1.show()

年龄统计UserAge实例?


import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

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

    val conf:SparkConf=new SparkConf().setMaster("local[*]").setAppName("sparkDemo")
    val sc:SparkContext=SparkContext.getOrCreate(conf)

    val userage: RDD[String] = sc.textFile("in/userage.txt")
//    val age2: RDD[Int] = userage.map(x=>{
//      val strings: Array[String] = x.split(" ")
//      strings(1).toInt
//    })
//
//    val num:Long=age2.count()
//
//    val sumAge:Int=age2.reduce(_+_)
//
//    val result:Double=sumAge.toDouble/num
//    println(result)

    val rdd: RDD[(Int, Int)] = userage.map(x => {
      (x.split(" ")(1).toInt, 1)
    })

    val tuple: (Int, Int) = rdd.reduce((x, y)=>{(x._1+y._1,x._2+y._2)})
    println("avgage :" + tuple._1.toDouble /tuple._2 )

    val tuple2 = rdd.fold((0,0))((x,y)=>{(x._1+y._1,x._2+y._2)})
    println("avgage2 :" + tuple2._1.toDouble /tuple2._2 )


    val combRdd: RDD[(Int, (Int, Int))] = rdd.map(x => x.swap).combineByKey(x => (x, 1), (x: (Int, Int), y: Int)
    => {
      (x._1 + y, x._2 + 1)
    }, (x: (Int, Int), y: (Int, Int)) => {
      (x._1 + y._1, x._2 + y._2)
    })
    combRdd.foreach(println)

    val rdd2 = combRdd.map(x=>("age :",x._2._1.toDouble/x._2._2))
    rdd2.foreach(println)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:07:42  更:2021-12-10 11:07:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:52:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码