Spark python集成

时间:2023-01-15 11:29:35

Spark python集成

1、介绍

Spark支持python语言,对于大量的SQL类型的操作,不需要编译,可以直接提交python文件给spark来运行,因此非常简单方便,但是性能要比scala或java慢。对于常规任务,可以使用python来编写,特殊任务还是建议scala编写。

2、使用pyspark启动spark shell(centos)

2.1 启动pyspark

$>spark/bin/pyspark --master spark://s101:7077

Spark python集成

使用python实现word count

>>>rdd1 = sc.textFile("/user/centos/data/1.txt")
>>>rdd2 = rdd1.flatMap(lambda e : e.split(" "))
>>>rdd3 = rdd2.map(lambda e : (e , 1))
>>>rdd4 = rdd3.reduceByKey(lambda a,b : a + b)
>>>rdd4.collect()

2.2 自定义函数问题

在hive中注册的自定义函数在spark sql中需要删除重新注册,pyspark中也是一样的。

2.2.1 使用driver端jar注册

在client部署模式可以使用。

#注意 python是区分大小写的,False和True是关键字
>>>spark.sql("use umeng_big11").show(1000,False) #删除原有的函数
>>>spark.sql("drop function forklogs").show() #添加jar包
>>>spark.sql("add jar /soft/hive/lib/umeng_hive.jar").show() #注册函数
>>>spark.sql("create function forklogs as 'com.oldboy.umeng.hive.udf.ForkLogUDTF'")
.show()
2.2.2 使用--jars进行注册

在cluster部署模式下,driver运行在哪个worker不一定,因此可采用该中方式来注册函数。

  1. 使用--jars参数启动pyspark

    $>pyspark --master yarn --jars /soft/hive/lib/umeng_hive.jar
  2. 删除原来的函数

    >>>spark.sql("drop function umeng_big11.forklogs").show()
  3. 注册函数

    >>>spark.sql("use umeng_big11").show()
    >>>spark.sql("create function forklogs as 'com.oldboy.umeng.hive.udf.ForkLogUDTF'")
    .show()

2.3 使用函数

函数注册后,就可以在sql中进行使用。

>>>spark.sql("select forklogs(servertimestr ,clienttimems , clientip , log) from raw_logs limit 1").show(100, False)

结果如图:

Spark python集成

3、win7 + spark + hive + python集成

windows上使用spark的pyspark访问hive数据仓库。

3.1 安装spark软件包

解压即可!

Spark python集成

3.2 复制mysql驱动到spark/lib下

hive元数据存在了mysql中,因此需要将mysql的驱动程序复制到spark\jars目录下,以便能够连接到mysql,否则报出JDO事务异常之类的消息。

Spark python集成

3.3 复制hadoop的配置目录到是spark的conf下

spar启动时需要访问hadoop集群,我们使用的hadoop的ha配置模式,因此赋值ha目录到spark下。

Spark python集成

3.4 复制hadoop和hive的配置文件到spark conf下

core-site.xml + hdfs-site.xml + hive-site.xml文件复制到spark的conf目录下。

Spark python集成

3.5 在pyspark脚本中添加HADOOP_CONF_DIR环境变量,指向hadoop配置目录

spark的pyspark.cmd调用的是pyspark2.cmd,因此在pyspark2.cmd设置即可。

@echo off

rem
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements. See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License. You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.
rem ################## 设置hadoop配置目录的环境变量 ##################
set HADOOP_CONF_DIR=D:\downloads\spark-2.1.0-bin-hadoop2.7\hadoop_ha rem Figure out where the Spark framework is installed
set SPARK_HOME=%~dp0.. call "%SPARK_HOME%\bin\load-spark-env.cmd"
set _SPARK_CMD_USAGE=Usage: bin\pyspark.cmd [options] rem Figure out which Python to use.
if "x%PYSPARK_DRIVER_PYTHON%"=="x" (
set PYSPARK_DRIVER_PYTHON=python
if not [%PYSPARK_PYTHON%] == [] set PYSPARK_DRIVER_PYTHON=%PYSPARK_PYTHON%
) set PYTHONPATH=%SPARK_HOME%\python;%PYTHONPATH%
set PYTHONPATH=%SPARK_HOME%\python\lib\py4j-0.10.4-src.zip;%PYTHONPATH% set OLD_PYTHONSTARTUP=%PYTHONSTARTUP%
set PYTHONSTARTUP=%SPARK_HOME%\python\pyspark\shell.py call "%SPARK_HOME%\bin\spark-submit2.cmd" pyspark-shell-main --name "PySparkShell" %*

截图如下:

Spark python集成

3.6 启动pyspark,连接到yarn

cmd>pyspark --master yarn

启动成功后,如下图所示:

Spark python集成

Spark python集成

3.7 使用如下命令,查看操作结果

>>>spark.sql("show databases").show(1000 ,False)

执行结果如图:

Spark python集成

3.7 总结

windows下配置方式主要就是三个要素,mysql驱动程序、hadoop的配置目录与环境变量指定,还有就是注意namenode的standby问题。如果长时间启动不起来,查看是否是namenode standby了!!!

4、IDEA下开发pyspark程序

在windows的idea集成使用python访问hive数据库,先在windows上安装python和spark。注意,在进行该工作前,一定要搞定步骤(3)。

4.1 创建java模块

4.2 项目结构中引入python支持

  1. 点击project structure

    Spark python集成

  2. 选中模块,右键添加python

    Spark python集成

  3. 指定python解释器

    Spark python集成

  4. 结果如图

    Spark python集成

4.3 运行配置中指定环境变量

idea下执行spark的python,主要指定SPARK_HOME和PYTHONPATH环境变量。

  1. 打开运行配置窗口

    Spark python集成

  2. 点击环境变量按钮

    Spark python集成

  3. 按照如下添加环境变量值

    SPARK_HOME=D:\downloads\spark-2.1.0-bin-hadoop2.7
    PYTHONPATH=D:\downloads\spark-2.1.0-bin-hadoop2.7\python

    如图所示:

    Spark python集成

4.4 导入spark的pyspark.zip包

spark的pytyon核心库位于pyspark.zip包中,比如SparkSession等。因此需要在模块中进行导入。

  1. 选择模块依赖部分的+,选择“JAR or directories...”按钮

    Spark python集成

  2. 定位python.zip文件

    Spark python集成

  3. 完成后,效果如下:

    Spark python集成

4.5 编写Python程序

4.5.1 创建python文件

Spark python集成

Spark python集成

4.5.2 输入如下代码
# -*-coding:utf-8-*-

from pyspark.sql import *

if __name__ == '__main__':
spark = SparkSession.builder.enableHiveSupport().getOrCreate()
arr = spark.sql("show databases").collect()
for x in arr:
print x
4.5.3 运行python文件

Spark python集成

4.5.4 运行结果如下

Spark python集成

4.5.5 处理自定义函数

对于自定义的hive函数,需要drop掉后,重新注册,注册时需要add jar,代码如下:

# -*-coding:utf-8-*-

from pyspark import SparkContext, SparkConf
from pyspark.sql import * if __name__ == '__main__':
#注意 appName千万不要有空格!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
spark = SparkSession.builder.enableHiveSupport().appName("pydemo").getOrCreate()
spark.sql("show databases").show() #使用库
spark.sql("use umeng_big11").show() #删除函数
dropfunc = "drop function forklogs"
spark.sql(dropfunc).show #添加jar包
addjar = "add jar D:\\big11_umeng\\out\\artifacts\\umeng_hive_jar\\umeng_hive.jar"
spark.sql(addjar).show #创建函数
regfunc = "create function forklogs as 'com.oldboy.umeng.hive.udf.ForkLogUDTF'"
spark.sql(regfunc).show #调用自定义函数
spark.sql("select forklogs(servertimestr , clienttimems , clientip , log) from raw_logs limit 1").show(1,False)

执行结果如下:

Spark python集成

Spark python集成的更多相关文章

  1. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  2. windows和linux中搭建python集成开发环境IDE——如何设置多个python环境

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  3. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  4. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  5. Python集成开发环境(Eclipse+Pydev)

    刚開始学习python,就用Editplus, Notepad++来写小程序, 后来接触了Sublime Text2.认为很不错,没事写写代码.就用编辑器Sublime Text2,最好再配搭一个ap ...

  6. windows和linux在建筑python集成开发环境IDE

    http://blog.csdn.net/pipisorry/article/details/39854707 使用的系统及软件 Ubuntu / windows Python 2.7 / pytho ...

  7. mac 配置Python集成开发环境

    mac 配置Python集成开发环境(Eclipse +Python+Pydev) 1.下载Mac版64位的Eclipse. 进入到Eclipse官方网站的下载页面(http://www.eclips ...

  8. Pandas基础学习与Spark Python初探

    摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...

  9. python 集成cython && push 测试pip 仓库

    昨天创建了一个简单的python 集成cython 的项目 master 但是有几个问题 目前的构建时基于make 同时需要本地执行,为了方便基于pip 的安装,做了如下调整 项目准备 项目使用ven ...

随机推荐

  1. win7下wndows virtual pc 2007 装xp比新版本的 Windows virtual pc 好用

    2007下装xp虚拟机启动快,支持拖放.

  2. JAVA通过HTTP访问:Post+Get方式(转)

    public class TestGetPost { /** * 向指定URL发送GET方法的请求 * @param url 发送请求的URL * @param param 请求参数,请求参数应该是n ...

  3. 九度 OJ1008 hdu 3790

    #include<stdio.h> #include<string.h> struct node { int d; int p; }g[][]; #define inf 0x3 ...

  4. Nginx &plus; django windows下配置

    1.下载nginx, 去http://nginx.org/en/download.html 下载,我下载的是1.8 stable版本. 2.配置文件/conf/nginx.conf #user nob ...

  5. iOS开发——数据持久化Swift篇&amp&semi;(一)NSUserDefault

    NSUserDefault //******************** 5.1 NSUserDefault和对象归档 func useNSUserDefault() { //通过单利来创建一个NSU ...

  6. March of the Penguins

    poj3498:http://poj.org/problem?id=3498 题意:某个冰块上有a只企鹅,总共可以跳出去b只,问是否可能所有的企鹅都跳到某一块冰块上,输出所有的可能的冰块的编号. 由于 ...

  7. Codeforces Round &num;216 &lpar;Div&period; 2&rpar; E&period; Valera and Queries (BIT)

    标题效果: 给很多分布 x 行轴. 然后给出了一个非常的多点集,问该组点分布多少不同段. IDEAS: 分散成多个线段点集的. 给出的线段的话,也就是说这个点集上不会有点在这条线段上. 所以我们就是求 ...

  8. excel导出使用get请求参数过长问题

    遇到的问题: excel导出功能时,使用的是window.location.href=url也就是get请求.当传入参数过长的时候就报了414,地址过长的错误. 解决思路: 将get请求换为post请 ...

  9. js对象工厂函数与构造函数

    转自:http://www.cnblogs.com/Jener/p/5920963.html ★概述:         使用对象字面量,或者向空对象中动态地添加新成员,是最简单易用的对象创建方法.然而 ...

  10. &lbrack;蓝桥杯&rsqb;ALGO-92&period;算法训练&lowbar;前缀表达式

    问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法).“-”(减法).“*”(乘法)或“/”(除法),运算对象为 ...