zoukankan      html  css  js  c++  java
  • 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



  • 相关阅读:
    /etc/sysctl.conf 控制内核相关配置文件
    python 并发编程 非阻塞IO模型
    python 并发编程 多路复用IO模型
    python 并发编程 异步IO模型
    python 并发编程 阻塞IO模型
    python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
    python 并发编程 基于gevent模块实现并发的套接字通信
    python 并发编程 io模型 目录
    python 并发编程 socket 服务端 客户端 阻塞io行为
    python 并发编程 IO模型介绍
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7109906.html
Copyright © 2011-2022 走看看