pyspark入门(一)

pyspark入门基础

pyspark简介

首先我们都应该清楚apache是Scala编写的程序,而最近几年吟哦日机器学习的兴起,同时降低科技人才使用编程语言的代价,python这种动态语言成为2019年最受欢迎的编程语言之一(java依然是岿然不动的架构语言,C/C++最为语言之祖在底层设计依然是他的天下),为了是的数据应用于生产变得更加简单,pyspark应运而生,你也可以直接使用python语言直接出路RDD文件(基于py4j的第三方库,这里与主题无关,不做过多的介绍)

sparkcontext

SparkContext是所有spark的入口,当我们启动任何一个驱动程序的时候,它具有主函数main的作用,并且在工作节点上执行程序内的操作。
SparkContext使用py4j启动JVM并创建javaSparkContext,默认情况下,PySpark将SparkContext作为‘sc’提供,因此新创建的SparkContext不起作用。
Data flow结构图
以下是代码模块包含Pyspark类的详细信息以及SparkContext可以采用的参数。

class pyspark.SparkContext (
   master = None,
   appName = None, 
   sparkHome = None, 
   pyFiles = None, 
   environment = None, 
   batchSize = 0, 
   serializer = PickleSerializer(), 
   conf = None, 
   gateway = None, 
   jsc = None, 
   profiler_cls = <class 'pyspark.profiler.BasicProfiler'>
)

以下是SparkContext的参数具体含义:

Master- 它是连接到的集群的URL。
appName- 您的工作名称。
sparkHome - Spark安装目录。
pyFiles - 要发送到集群并添加到PYTHONPATH的.zip或.py文件。
environment - 工作节点环境变量。
batchSize - 表示为单个Java对象的Python对象的数量。设置1以禁用批处理,设置0以根据对象大小自动选择批处理大小,或设置为-1以使用无限批处理大小。
serializer- RDD序列化器。
Conf - L {SparkConf}的一个对象,用于设置所有Spark属性。
gateway - 使用现有网关和JVM,否则初始化新JVM。
JSC - JavaSparkContext实例。
profiler_cls - 用于进行性能分析的一类自定义Profiler(默认为pyspark.profiler.BasicProfiler)。
在上述参数中,主要使用master和appname。任何PySpark程序的会使用以下两行:

from pyspark import SparkContext
sc = SparkContext("local", "First App")

连接本地Spark

import pandas as pd
from pyspark.sql import SparkSession
spark = SparkSession \
    .builder \
    .appName('my_first_app_name') \
    .getOrCreate()

创建DataFrame

1、从变量开始创建

stringrdd = spark.sparkContext.parallelize([
    (123, "Katie", 19, "brown"),
    (234, "Michael", 22, "green"),
    (345, "Simone", 23, "blue")
])
# 指定模式, StructField(name,dataType,nullable)
# 其中:
#   name: 该字段的名字,
#   dataType:该字段的数据类型,
#   nullable: 指示该字段的值是否为空
import pyspark.sql.types as typ
labels =  [('id',typ.LongType()),
          ('name',typ.StringType()),
          ('age',typ.LongType()),
          ('eyecolor',typ.StringType())]
schema = typ.StructType([typ.StructField(i[0],i[1],False)for i in labels])
# 对RDD应用该模式并且创建DataFrame
data = spark.createDataFrame(stringrdd,schema=schema)
# 利用DataFrame创建一个临时视图
data.registerTempTable("swimmers")
data.show()

在这里插入图片描述
2、使用自动类型推断的方式创建dataframe

data = [(123, "Katie", 19, "brown"),
        (234, "Michael", 22, "green"),
        (345, "Simone", 23, "blue")]
df = spark.createDataFrame(data, schema=['id', 'name', 'age', 'eyccolor'])
df.show()
df.count()

在这里插入图片描述

读取json文件

file = r"D:\spark-2.1.0-bin-hadoop2.7\examples\src\main\resources\people.json"
df = spark.read.json(file)
df.show()

在这里插入图片描述

读取csv文件

file = r'C:\Users\Administrator\Desktop\kaggle泰坦尼克号获救率预测数据集\train.csv'
df = spark.read.csv(file,header=True,inferSchema=True)
df.show(5)

在这里插入图片描述

读取Mysql

# 此时需要将mysql-connector-java-8.0.13.jar驱动放到spark-2.2.0-bin-hadoop2.7\jars下面
# 单机环境可行,集群环境不行
# 重新执行
sql = '(select * from sc where C =01) t'
url = 'jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT'
table = sql
properties = {"user":"root","password":"xdk520"}
df = spark.read.jdbc(url,table,properties=properties)
df.show()

在这里插入图片描述

从列式存储的parquet读取

file = r"D:\spark-2.1.0-bin-hadoop2.7\examples\src\main\resources\users.parquet"
data = spark.read.parquet(file)
data.show()

在这里插入图片描述

读取hive

# 如果已经配置spark连接hive的参数,可以直接读取hive数据
spark = SparkSession \
        .builder \
        .enableHiveSupport() \      
        .master("172.31.100.170:7077") \
        .appName("my_first_app_name") \
        .getOrCreate()

df=spark.sql("select * from hive_tb_name")
df.show()

保存文件

写进csv文件

file1=r"D:\spark-2.1.0-bin-hadoop2.7\examples\src\main\resources\test.csv"
df.write.csv(path=file1, header=True, sep=",", mode='overwrite')
#保留第一行,以逗号作为分隔符,#overwrite 清空后再写入

保存到parquet

file2=r"D:\spark-2.1.0-bin-hadoop2.7\examples\src\main\resources\test.parquet"
df.write.parquet(path=file2,mode='overwrite')

写入sql

# 会自动对齐字段,也就是说,df 的列不一定要全部包含MySQL的表的全部列才行

# overwrite 清空表再导入
url = 'jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT'
table = 'eye'
properties = {"user":"root","password":"xdk520"}
df.write.jdbc(url,table,mode='overwrite',properties=properties)

# mode= 'append '追加方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值