• sparksql---通过pyspark实现


    上次在spark的一个群里面,众大神议论:dataset会取代rdd么?

    大神1:听说之后的mlib都会用dataset来实现,呜呜,rdd要狗带

    大神2:dataset主要是用来实现sql的,跟mlib没多大关系,你们说为什么要用dataset呢?

    大神3:因为老板喜欢。-------在市场上找一个会写sql和会做spark开发是两个工资等级,两个字“省钱”。

    结论:上面的说的东西确实是如此,很多时候我们看到的结果其实某种程度都是市场选择的结果。

    -------------------------------------------------------------------------------华丽的分割线-------------------------------------------

    以我自己了解sparksql的学习方法,我更倾向于首先实现它,然后再了解具体的原理,however,对于sparksql的数据类型还是要首先理解下,不然之后做的事情可能都做不了。

    sparksql里面的类:

    这些都在:http://spark.apache.org/docs/1.3.1/api/python/pyspark.sql.html#pyspark.sql 

    重点说下SQLContext这个就是一个装dataframe的容器,datafram就相当于一张表,Row格式是经常用到;

    其他的大家可以去网上了解下:dataframe/rdd的区别于联系,目前mlib大多是用rdd写出来的;

    以下给出一个用pyspark写出来的列子:

    ###first table
    from pyspark.sql import SQLContext,Row
    ccdata=sc.textFile("/home/srtest/spark/spark-1.3.1/examples/src/main/resources/cc.txt")
    ccpart = ccdata.map(lambda le:le.split(","))  ##我的表是以逗号做出分隔
    cc1=ccpart.map(lambda p:Row(sid=p[0],age=int(p[1]),yz=p[2],yf=p[3],yc=p[4],hf=p[5],hk=p[6])) ####这就是将数据变成ROW的格式,另外确定数据类型
    schemacc1=sqlContext.createDataFrame(cc1)#######源码中createDataframe(ROW,schema),所以如果上步没有转化成ROW是无法完成转化成dataframe
    schemacc1.registerTempTable("cc1")#############注册临时表
    xx=sqlContext.sql(" SELECT * FROM cc1 WHERE age=20 ") ########直接用写sql就能实现表的运算

    point1:说了上面的例子,大家会有可能用到IN,exist这样的关系时,目前2.0版本一下的spark是不支持in,exist.到了2.0后你想怎么折腾都可以;

    那么有人肯定会问,如果要用到in,exist,怎么办,我只能说多建张表,用join实现;

    point2:下篇博客,我打算直接不用注册成表,直接用dataframe来实现sql

  • 相关阅读:
    java基础学习笔记四(异常)
    关于linux下crontab mysql备份出来的数据为0字节的问题
    转:国内优秀npm镜像推荐及使用
    webpack使用总结~
    php下载远程文件方法~
    腾讯开放平台web第三方登录获取信息类(包含签名)
    windows 平台 php_Imagick 拓展遇到的那些坑!
    转:CentOS/Debian/Ubuntu一键安装LAMP(Apache/MySQL/PHP)环境
    composer 报错:Your requirements could not be resolved to an installable set of packages 解决方法
    Javascript模块化编程(三):require.js的用法
  • 原文地址:https://www.cnblogs.com/xyt-cathy/p/5632502.html
Copyright © 2020-2023  润新知