• spark定制之五:使用说明


    背景

    spark-shell是一个scala编程解释运行环境,能够通过编程的方式处理逻辑复杂的计算,但对于简单的类似sql的数据处理,比方分组求和,sql为”select g,count(1) from sometable group by g”,须要写的程序是:

    val hive = neworg.apache.spark.sql.hive.HiveContext(sc)

    import hive._

    val rdd = hql(“selectg,count(1) from sometable group by g”)

    rdd.collect

    看起来繁琐。对于仅仅注重业务数据的人来说,附加了过多的spark工具的内容。

    让提交sql命令easy

    用spark-shell的-i參数设定启动脚本,能够省去hive变量定义和import两句。

    用面向对象编程把后两句能够合并变为hql(“select g,count(1) from sometable group by g”).collect。

    用scala隐形转换再简单为“selectg,count(1) from sometable group by g”.hqlgo。

    用scala省略括号特性,能够写成“selectg,count(1) from sometable group by g” hqlgo。

    简化后的语句:“select g,count(1) from sometable group by g” hqlgo

    假设分多行写能够写成:

    “””

    selectg,count(1)

    from sometable

    group by g

    “”” hqlgo

    让结果保存easy

    查询结果保存须要写的程序:

    val rdd = hql(“selectg,count(1) from sometable group by g”)

    rdd.saveAsTextFile(“hdfs:/somedir”)

    同上面的sql提交类似,简化后的语句:“select g,count(1) from sometable group by g”saveto “hdfs:/somedir”

    多行形式:

    “””

    selectg,count(1)

    from sometable

    group by g”””saveto “hdfs:/somedir”

    注:

    1)多行写时saveto与前面不能再分行。后面的路径也不能再分行

    2)假设保存到本地文件,文件应包括扩展名后缀

    3)原spark实现的输出格式有问题,hive不能正确解析数据结构,新改的定制版已解决

    让读取文件创建内存表easy

    对hdfs中的数据进行sql,假设想在hive中创建表则用”create externaltable ...” hqlgo就可以;假设仅仅创建内存表做数据处理,须要写的程序:

    val rdd =sc.textFile(“hdfs:/somedir”)

    case class SomeClass(name:String,age:Int,weight:Double)

    val schemardd = rdd.map(_.split(" ")).map(t=>SomeClass (t(0),t(1),t(2)))

    hive.registerRDDAsTable(schemardd,"sometable")

    hql(“selectg,count(1) from sometable group by g”).collect

    简化后的语句:

    "create table sometable (name string,age int,weightdouble)"from "hdfs:/somedir"

    “selectg,count(1) from sometable group by g” hqlgo

    多行形式:

    “””

    create tablesometable (

    name string,

    age int,

    weight double)

    “”” from"hdfs:/somedir"

    “selectg,count(1) from sometable group by g” hqlgo

    注:

    1)”create table ”需严格按此写,create后、table后必须有一个空格

    2)输出路径为了避免覆盖大的文件夹,全路径字符长度必须大于等于24个字符

    结果检查

    计算结果可能是数据表、也可能输出到文件。

    数据表检查:”sometable” isok

    文件检查:”somefile.txt” isok

    “hdfs:/somedir” isok

    推断的标准是文件不为空,长度大小大于0;路径不为空。以下存在长度大于的文件;数据表记录条数大于0。

    注:

    1)文件应包括扩展名后缀,在输入的字符串中假设包括“.”、“/”则觉得是文件或文件夹,不包括觉得是数据表

    2)假设想把查询结果保存到内存用val data = "select * from testperson" hqlresult,查看内存中查询的结果用do show data

    定制spark的启动

    /sysdir/spark-1.0.0/bin/myspark

    输入help能够得到帮助。

    Spark定制的启动shell脚本:http://blog.csdn.net/hyalone2010/article/details/37566699

    spark定制的start.scala:http://blog.csdn.net/hyalone2010/article/details/37567203



  • 相关阅读:
    面向对象程序设计课第五次作业
    面向对象程序设计课第三次作业
    MeasureSpec 解析
    JavaWeb学习总结(一)JavaWeb入门与Tomcat
    Redis GetTypedClient
    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询
    EF 连接MySQL 数据库  保存中文数据后乱码问题
    VS2015 +EF6 连接MYSQL数据库生成实体
    WebConfig 自定义节点configSections配置信息
    docker菜鸟入门
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7109906.html
Copyright © 2020-2023  润新知