pyspark总结2——DataFrame

spark的DataFrame与python的DataFrame类似,但是其处理速度远快于无结构的RDD。


目录

  • 1,创建DataFrame
  • 2,查询方法
    • 2.1 利用DataFrame API查询
    • 2.2 利用SQL查询

1,创建DataFrame

Spark 2.0 用 SparkSession 代替了SQLContext。各种 Spark contexts,包括:HiveContext, SQLContext, StreamingContext,以及SparkContext 全部合并到了SparkSession中,以后仅用这一个包作为读取数据的入口。

import pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Python Spark SQL basic example")\
							.config("spark.some.config.option", "some-value")\
							.getOrCreate()
sc = spark.sparkContext

方法一:构建并生成

#生成json数据
stringJSONRDD = sc.parallelize(
("""{"id":"1","name":"a","age":"20"}""",
"""{"id":"2","name":"b","age":"21"}""",
"""{"id":"3","name":"c","age":"22"}""")
)
# 创建DataFrame
peopleJSON = spark.read.json(stringJSONRDD)
#创建临时表
peopleJSON.createOrReplaceTempView("peopleJSON")


peopleJSON.show()
+---+---+----+
|age| id|name|
+---+---+----+
| 20|  1|   a|
| 21|  2|   b|
| 22|  3|   c|
+---+---+----+

或者通过编程指定模式

# 导入类型
from pyspark.sql.types import *

# 生成以逗号分隔的数据
stringCSVRDD = sc.parallelize([
    (1,'a',20),
    (2,'b',21),
    (3,'c',22)
])
# 指定模式
schema = StructType([
    StructField('id',LongType(),True),
    StructField('name',StringType(),True),
    StructField('age',LongType(),True)
])

# 创建DateFrame
people = spark.createDataFrame(stringCSVRDD,schema)
# 利用DataFrame创建临时视图
people.createOrReplaceTempView('people')

方法二:直接导入

csv_data = spark.read.option("charset", "utf-8")\
                .option("header", "true")\
                .option("quote", "\"")\
                .option("delimiter", ",")\
                .csv('E:\PythonWorkSpace\Tencent2020\data\\train_preliminary\\user.csv')

csv_data .show(10)
+-------+---+------+
|user_id|age|gender|
+-------+---+------+
|      1|  4|     1|
|      2| 10|     1|
|      3|  7|     2|
|      4|  5|     1|
|      5|  4|     1|
|      6|  6|     1|
|      7|  6|     2|
|      8|  5|     1|
|      9|  5|     1|
|     10|  9|     2|
+-------+---+------+

2,查询方法

2.1 利用DataFrame API查询

csv_data .count()
900000

csv_data .select('user_id','age').filter('age==2').show(10)

+-------+---+
|user_id|age|
+-------+---+
|     18|  2|
|     28|  2|
|     32|  2|
|     38|  2|
|     49|  2|
|     52|  2|
|     61|  2|
|     64|  2|
|     69|  2|
|     70|  2|
+-------+---+
only showing top 10 rows

2.2 利用SQL查询

csv_data .createOrReplaceTempView('csv_data ')
spark.sql('select count(csv_data .age) from csv_data ').show()
+----------+
|count(age)|
+----------+
|    900000|
+----------+

spark.sql('select user_id ,age from csv_data where age=2').show(10)
+-------+---+
|user_id|age|
+-------+---+
|     18|  2|
|     28|  2|
|     32|  2|
|     38|  2|
|     49|  2|
|     52|  2|
|     61|  2|
|     64|  2|
|     69|  2|
|     70|  2|
+-------+---+
only showing top 10 rows

你可能感兴趣的:(pyspark)