PySpark SQL 基础

189 阅读1分钟

1. PySpark SQL概述

  • PySpark提供了Python API来使用Spark SQL的功能

  • 可以通过SparkSession实例进行交互

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName("sql").getOrCreate()
    
  • 支持访问结构化数据源,分析和查询

    df = spark.read.json("people.json")
    df.filter(df.age > 20).show()
    

2. DataFrame操作

  • 创建DataFrame的常见方式

    df = spark.read.csv("data.csv"# 从CSV文件创建
    df2 = spark.createDataFrame(data, schema) # 从Python数据创建
    
  • 常见的DataFrame操作

    df.groupby("dept").count().show() # 分组聚合
    df.join(df2, "id").show() # 表连接 
    

3. 使用SQL查询

  • 通过spark.sql方法执行SQL

    spark.sql("SELECT * FROM TABLE WHERE age > 20").show()
    
  • 支持UDF用户自定义函数

    spark.udf.register("strLen", lambda x: len(x))  
    spark.sql("SELECT strLen('foo')").show()
    

4. 数据源访问

  • 内置对多种数据格式的访问和保存支持

    # # 写入JSON文件
    df.write.mode('overwrite').format('json').save('file_name')
    df = spark.read.parquet("table.parquet"# 读Parquet文件
    

5. 与pandas集成

  • Pandas与Spark DataFrame转换

    pdf = pd.DataFrame(data) 
    df = spark.createDataFrame(pdf) 
    pdf = df.toPandas()
    
  • 利用pandas进行数据处理再传入Spark

6. 多语言支持

  • PySpark可与Scala, Java, R等语言混合使用

    # 调用Scala用户定义函数
    df.withColumn("newCol", callUDF("scalaUDF")) 
    
  • 在一个应用中混合语言进行开发

7. 视图和临时表

  • 注册临时表进行SQL查询

    df.createOrReplaceTempView("people")
    spark.sql("SELECT * FROM people").show()
    
  • 全局临时视图在会话间共享

    df.createGlobalTempView("people")