国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

PySpark入門級(jí)學(xué)習(xí)教程,框架思維(中)

共 27164字,需瀏覽 55分鐘

 ·

2021-04-21 05:30

這周工作好忙,晚上陸陸續(xù)續(xù)寫了好幾波,周末來(lái)一次集合輸出,不過(guò)這個(gè)PySpark原定是分上下兩篇的,但是越學(xué)感覺(jué)越多,所以就分成了3 Parts,今天這一part主要就是講一下Spark SQL,這個(gè)實(shí)在好用!建議收藏學(xué)習(xí)哈哈。上一節(jié)的可點(diǎn)擊回顧下哈。《PySpark入門級(jí)學(xué)習(xí)教程,框架思維(上)》

?? Spark SQL使用

在講Spark SQL前,先解釋下這個(gè)模塊。這個(gè)模塊是Spark中用來(lái)處理結(jié)構(gòu)化數(shù)據(jù)的,提供一個(gè)叫SparkDataFrame的東西并且自動(dòng)解析為分布式SQL查詢數(shù)據(jù)。我們之前用過(guò)Python的Pandas庫(kù),也大致了解了DataFrame,這個(gè)其實(shí)和它沒(méi)有太大的區(qū)別,只是調(diào)用的API可能有些不同罷了。

我們通過(guò)使用Spark SQL來(lái)處理數(shù)據(jù),會(huì)讓我們更加地熟悉,比如可以用SQL語(yǔ)句、用SparkDataFrame的API或者Datasets API,我們可以按照需求隨心轉(zhuǎn)換,通過(guò)SparkDataFrame API 和 SQL 寫的邏輯,會(huì)被Spark優(yōu)化器Catalyst自動(dòng)優(yōu)化成RDD,即便寫得不好也可能運(yùn)行得很快(如果是直接寫RDD可能就掛了哈哈)。

創(chuàng)建SparkDataFrame

開(kāi)始講SparkDataFrame,我們先學(xué)習(xí)下幾種創(chuàng)建的方法,分別是使用RDD來(lái)創(chuàng)建使用python的DataFrame來(lái)創(chuàng)建、使用List來(lái)創(chuàng)建讀取數(shù)據(jù)文件來(lái)創(chuàng)建、通過(guò)讀取數(shù)據(jù)庫(kù)來(lái)創(chuàng)建

1. 使用RDD來(lái)創(chuàng)建

主要使用RDD的toDF方法。

rdd = sc.parallelize([("Sam"2888), ("Flora"2890), ("Run"160)])
df = rdd.toDF(["name""age""score"])
df.show()
df.printSchema()

# +-----+---+-----+
# | name|age|score|
# +-----+---+-----+
# |  Sam| 28|   88|
# |Flora| 28|   90|
# |  Run|  1|   60|
# +-----+---+-----+
# root
#  |-- name: string (nullable = true)
#  |-- age: long (nullable = true)
#  |-- score: long (nullable = true)
2. 使用python的DataFrame來(lái)創(chuàng)建
df = pd.DataFrame([['Sam'2888], ['Flora'2890], ['Run'160]],
                  columns=['name''age''score'])
print(">> 打印DataFrame:")
print(df)
print("\n")
Spark_df = spark.createDataFrame(df)
print(">> 打印SparkDataFrame:")
Spark_df.show()
# >> 打印DataFrame:
#     name  age  score
# 0    Sam   28     88
# 1  Flora   28     90
# 2    Run    1     60
# >> 打印SparkDataFrame:
# +-----+---+-----+
# | name|age|score|
# +-----+---+-----+
# |  Sam| 28|   88|
# |Flora| 28|   90|
# |  Run|  1|   60|
# +-----+---+-----+
3. 使用List來(lái)創(chuàng)建
list_values = [['Sam'2888], ['Flora'2890], ['Run'160]]
Spark_df = spark.createDataFrame(list_values, ['name''age''score'])
Spark_df.show()
# +-----+---+-----+
# | name|age|score|
# +-----+---+-----+
# |  Sam| 28|   88|
# |Flora| 28|   90|
# |  Run|  1|   60|
# +-----+---+-----+
4. 讀取數(shù)據(jù)文件來(lái)創(chuàng)建
# 4.1 CSV文件
df = spark.read.option("header""true")\
    .option("inferSchema""true")\
    .option("delimiter"",")\
    .csv("./test/data/titanic/train.csv")
df.show(5)
df.printSchema()

# 4.2 json文件
df = spark.read.json("./test/data/hello_samshare.json")
df.show(5)
df.printSchema()
5. 通過(guò)讀取數(shù)據(jù)庫(kù)來(lái)創(chuàng)建
# 5.1 讀取hive數(shù)據(jù)
spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive")
spark.sql("LOAD DATA LOCAL INPATH 'data/kv1.txt' INTO TABLE src")
df = spark.sql("SELECT key, value FROM src WHERE key < 10 ORDER BY key")
df.show(5)

# 5.2 讀取mysql數(shù)據(jù)
url = "jdbc:mysql://localhost:3306/test"
df = spark.read.format("jdbc") \
 .option("url", url) \
 .option("dbtable""runoob_tbl") \
 .option("user""root") \
 .option("password""8888") \
 .load()\
df.show()

常用的SparkDataFrame API

這里我大概是分成了幾部分來(lái)看這些APIs,分別是查看DataFrame的APIs、簡(jiǎn)單處理DataFrame的APIs、DataFrame的列操作APIs、DataFrame的一些思路變換操作APIs、DataFrame的一些統(tǒng)計(jì)操作APIs,這樣子也有助于我們了解這些API的功能,以后遇見(jiàn)實(shí)際問(wèn)題的時(shí)候可以解決。

首先我們這小節(jié)全局用到的數(shù)據(jù)集如下:

from pyspark.sql import functions as F
from pyspark.sql import SparkSession
# SparkSQL的許多功能封裝在SparkSession的方法接口中, SparkContext則不行的。
spark = SparkSession.builder \
    .appName("sam_SamShare") \
    .config("master""local[4]") \
    .enableHiveSupport() \
    .getOrCreate()
sc = spark.sparkContext

# 創(chuàng)建一個(gè)SparkDataFrame
rdd = sc.parallelize([("Sam"2888"M"),
                      ("Flora"2890"F"),
                      ("Run"160None),
                      ("Peter"55100"M"),
                      ("Mei"5495"F")])
df = rdd.toDF(["name""age""score""sex"])
df.show()
df.printSchema()

# +-----+---+-----+----+
# | name|age|score| sex|
# +-----+---+-----+----+
# |  Sam| 28|   88|   M|
# |Flora| 28|   90|   F|
# |  Run|  1|   60|null|
# |Peter| 55|  100|   M|
# |  Mei| 54|   95|   F|
# +-----+---+-----+----+
# root
#  |-- name: string (nullable = true)
#  |-- age: long (nullable = true)
#  |-- score: long (nullable = true)
#  |-- sex: string (nullable = true)
1、查看DataFrame的APIs
# DataFrame.collect
# 以列表形式返回行
df.collect()
# [Row(name='Sam', age=28, score=88, sex='M'),
# Row(name='Flora', age=28, score=90, sex='F'),
# Row(name='Run', age=1, score=60, sex=None),
# Row(name='Peter', age=55, score=100, sex='M'),
# Row(name='Mei', age=54, score=95, sex='F')]

# DataFrame.count
df.count()
# 5

# DataFrame.columns
df.columns
# ['name', 'age', 'score', 'sex']

# DataFrame.dtypes
df.dtypes
# [('name', 'string'), ('age', 'bigint'), ('score', 'bigint'), ('sex', 'string')]

# DataFrame.describe
# 返回列的基礎(chǔ)統(tǒng)計(jì)信息
df.describe(['age']).show()
# +-------+------------------+
# |summary|               age|
# +-------+------------------+
# |  count|                 5|
# |   mean|              33.2|
# | stddev|22.353970564532826|
# |    min|                 1|
# |    max|                55|
# +-------+------------------+
df.describe().show()
# +-------+-----+------------------+------------------+----+
# |summary| name|               age|             score| sex|
# +-------+-----+------------------+------------------+----+
# |  count|    5|                 5|                 5|   4|
# |   mean| null|              33.2|              86.6|null|
# | stddev| null|22.353970564532826|15.582040944625966|null|
# |    min|Flora|                 1|                60|   F|
# |    max|  Sam|                55|               100|   M|
# +-------+-----+------------------+------------------+----+

# DataFrame.select
# 選定指定列并按照一定順序呈現(xiàn)
df.select("sex""score").show()

# DataFrame.first
# DataFrame.head
# 查看第1條數(shù)據(jù)
df.first()
# Row(name='Sam', age=28, score=88, sex='M')
df.head(1)
# [Row(name='Sam', age=28, score=88, sex='M')]


# DataFrame.freqItems
# 查看指定列的枚舉值
df.freqItems(["age","sex"]).show()
# +---------------+-------------+
# |  age_freqItems|sex_freqItems|
# +---------------+-------------+
# |[55, 1, 28, 54]|      [M, F,]|
# +---------------+-------------+

# DataFrame.summary
df.summary().show()
# +-------+-----+------------------+------------------+----+
# |summary| name|               age|             score| sex|
# +-------+-----+------------------+------------------+----+
# |  count|    5|                 5|                 5|   4|
# |   mean| null|              33.2|              86.6|null|
# | stddev| null|22.353970564532826|15.582040944625966|null|
# |    min|Flora|                 1|                60|   F|
# |    25%| null|                28|                88|null|
# |    50%| null|                28|                90|null|
# |    75%| null|                54|                95|null|
# |    max|  Sam|                55|               100|   M|
# +-------+-----+------------------+------------------+----+

# DataFrame.sample
# 按照一定規(guī)則從df隨機(jī)抽樣數(shù)據(jù)
df.sample(0.5).show()
# +-----+---+-----+----+
# | name|age|score| sex|
# +-----+---+-----+----+
# |  Sam| 28|   88|   M|
# |  Run|  1|   60|null|
# |Peter| 55|  100|   M|
# +-----+---+-----+----+
2、簡(jiǎn)單處理DataFrame的APIs
# DataFrame.distinct
# 對(duì)數(shù)據(jù)集進(jìn)行去重
df.distinct().show()

# DataFrame.dropDuplicates
# 對(duì)指定列去重
df.dropDuplicates(["sex"]).show()
# +-----+---+-----+----+
# | name|age|score| sex|
# +-----+---+-----+----+
# |Flora| 28|   90|   F|
# |  Run|  1|   60|null|
# |  Sam| 28|   88|   M|
# +-----+---+-----+----+

# DataFrame.exceptAll
# DataFrame.subtract
# 根據(jù)指定的df對(duì)df進(jìn)行去重
df1 = spark.createDataFrame(
        [("a"1), ("a"1), ("b",  3), ("c"4)], ["C1""C2"])
df2 = spark.createDataFrame([("a"1), ("b"3)], ["C1""C2"])
df3 = df1.exceptAll(df2)  # 沒(méi)有去重的功效
df4 = df1.subtract(df2)  # 有去重的奇效
df1.show()
df2.show()
df3.show()
df4.show()
# +---+---+
# | C1| C2|
# +---+---+
# |  a|  1|
# |  a|  1|
# |  b|  3|
# |  c|  4|
# +---+---+
# +---+---+
# | C1| C2|
# +---+---+
# |  a|  1|
# |  b|  3|
# +---+---+
# +---+---+
# | C1| C2|
# +---+---+
# |  a|  1|
# |  c|  4|
# +---+---+
# +---+---+
# | C1| C2|
# +---+---+
# |  c|  4|
# +---+---+

# DataFrame.intersectAll
# 返回兩個(gè)DataFrame的交集
df1 = spark.createDataFrame(
        [("a"1), ("a"1), ("b",  3), ("c"4)], ["C1""C2"])
df2 = spark.createDataFrame([("a"1), ("b"4)], ["C1""C2"])
df1.intersectAll(df2).show()
# +---+---+
# | C1| C2|
# +---+---+
# |  a|  1|
# +---+---+

# DataFrame.drop
# 丟棄指定列
df.drop('age').show()

# DataFrame.withColumn
# 新增列
df1 = df.withColumn("birth_year"2021 - df.age)
df1.show()
# +-----+---+-----+----+----------+
# | name|age|score| sex|birth_year|
# +-----+---+-----+----+----------+
# |  Sam| 28|   88|   M|      1993|
# |Flora| 28|   90|   F|      1993|
# |  Run|  1|   60|null|      2020|
# |Peter| 55|  100|   M|      1966|
# |  Mei| 54|   95|   F|      1967|
# +-----+---+-----+----+----------+

# DataFrame.withColumnRenamed
# 重命名列名
df1 = df.withColumnRenamed("sex""gender")
df1.show()
# +-----+---+-----+------+
# | name|age|score|gender|
# +-----+---+-----+------+
# |  Sam| 28|   88|     M|
# |Flora| 28|   90|     F|
# |  Run|  1|   60|  null|
# |Peter| 55|  100|     M|
# |  Mei| 54|   95|     F|
# +-----+---+-----+------+


# DataFrame.dropna
# 丟棄空值,DataFrame.dropna(how='any', thresh=None, subset=None)
df.dropna(how='all', subset=['sex']).show()
# +-----+---+-----+---+
# | name|age|score|sex|
# +-----+---+-----+---+
# |  Sam| 28|   88|  M|
# |Flora| 28|   90|  F|
# |Peter| 55|  100|  M|
# |  Mei| 54|   95|  F|
# +-----+---+-----+---+

# DataFrame.fillna
# 空值填充操作
df1 = spark.createDataFrame(
        [("a"None), ("a"1), (None,  3), ("c"4)], ["C1""C2"])
# df2 = df1.na.fill({"C1": "d", "C2": 99})
df2 = df1.fillna({"C1""d""C2"99})
df1.show()
df2.show()

# DataFrame.filter
# 根據(jù)條件過(guò)濾
df.filter(df.age>50).show()
# +-----+---+-----+---+
# | name|age|score|sex|
# +-----+---+-----+---+
# |Peter| 55|  100|  M|
# |  Mei| 54|   95|  F|
# +-----+---+-----+---+
df.where(df.age==28).show()
# +-----+---+-----+---+
# | name|age|score|sex|
# +-----+---+-----+---+
# |  Sam| 28|   88|  M|
# |Flora| 28|   90|  F|
# +-----+---+-----+---+
df.filter("age<18").show()
# +----+---+-----+----+
# |name|age|score| sex|
# +----+---+-----+----+
# | Run|  1|   60|null|
# +----+---+-----+----+


# DataFrame.join
# 這個(gè)不用多解釋了,直接上案例來(lái)看看具體的語(yǔ)法即可,DataFrame.join(other, on=None, how=None)
df1 = spark.createDataFrame(
        [("a"1), ("d"1), ("b",  3), ("c"4)], ["id""num1"])
df2 = spark.createDataFrame([("a"1), ("b"3)], ["id""num2"])
df1.join(df2, df1.id == df2.id, 'left').select(df1.id.alias("df1_id"),
                                               df1.num1.alias("df1_num"),
                                               df2.num2.alias("df2_num")
                                               ).sort(["df1_id"], ascending=False)\
    .show()


# DataFrame.agg(*exprs)
# 聚合數(shù)據(jù),可以寫多個(gè)聚合方法,如果不寫groupBy的話就是對(duì)整個(gè)DF進(jìn)行聚合
# DataFrame.alias
# 設(shè)置列或者DataFrame別名
# DataFrame.groupBy
# 根據(jù)某幾列進(jìn)行聚合,如有多列用列表寫在一起,如 df.groupBy(["sex", "age"])
df.groupBy("sex").agg(F.min(df.age).alias("最小年齡"),
                      F.expr("avg(age)").alias("平均年齡"),
                      F.expr("collect_list(name)").alias("姓名集合")
                      ).show()
# +----+--------+--------+------------+
# | sex|最小年齡|平均年齡|    姓名集合|
# +----+--------+--------+------------+
# |   F|      28|    41.0|[Flora, Mei]|
# |null|       1|     1.0|       [Run]|
# |   M|      28|    41.5|[Sam, Peter]|
# +----+--------+--------+------------+


# DataFrame.foreach
# 對(duì)每一行進(jìn)行函數(shù)方法的應(yīng)用
def f(person):
    print(person.name)
df.foreach(f)
# Peter
# Run
# Sam
# Flora
# Mei

# DataFrame.replace
# 修改df里的某些值
df1 = df.na.replace({"M""Male""F""Female"})
df1.show()

# DataFrame.union
# 相當(dāng)于SQL里的union all操作
df1 = spark.createDataFrame(
        [("a"1), ("d"1), ("b",  3), ("c"4)], ["id""num"])
df2 = spark.createDataFrame([("a"1), ("b"3)], ["id""num"])
df1.union(df2).show()
df1.unionAll(df2).show()
# 這里union沒(méi)有去重,不知道為啥,有知道的朋友麻煩解釋下,謝謝了。
# +---+---+
# | id|num|
# +---+---+
# |  a|  1|
# |  d|  1|
# |  b|  3|
# |  c|  4|
# |  a|  1|
# |  b|  3|
# +---+---+

# DataFrame.unionByName
# 根據(jù)列名來(lái)進(jìn)行合并數(shù)據(jù)集
df1 = spark.createDataFrame([[123]], ["col0""col1""col2"])
df2 = spark.createDataFrame([[456]], ["col1""col2""col0"])
df1.unionByName(df2).show()
# +----+----+----+
# |col0|col1|col2|
# +----+----+----+
# |   1|   2|   3|
# |   6|   4|   5|
# +----+----+----+
3、DataFrame的列操作APIs

這里主要針對(duì)的是列進(jìn)行操作,比如說(shuō)重命名、排序、空值判斷、類型判斷等,這里就不展開(kāi)寫demo了,看看語(yǔ)法應(yīng)該大家都懂了。

Column.alias(*alias, **kwargs)  # 重命名列名
Column.asc()  # 按照列進(jìn)行升序排序
Column.desc()  # 按照列進(jìn)行降序排序
Column.astype(dataType)  # 類型轉(zhuǎn)換
Column.cast(dataType)  # 強(qiáng)制轉(zhuǎn)換類型
Column.between(lowerBound, upperBound)  # 返回布爾值,是否在指定區(qū)間范圍內(nèi)
Column.contains(other)  # 是否包含某個(gè)關(guān)鍵詞
Column.endswith(other)  # 以什么結(jié)束的值,如 df.filter(df.name.endswith('ice')).collect()
Column.isNotNull()  # 篩選非空的行
Column.isNull()
Column.isin(*cols)  # 返回包含某些值的行 df[df.name.isin("Bob", "Mike")].collect()
Column.like(other)  # 返回含有關(guān)鍵詞的行
Column.when(condition, value)  # 給True的賦值
Column.otherwise(value)  # 與when搭配使用,df.select(df.name, F.when(df.age > 3, 1).otherwise(0)).show()
Column.rlike(other)  # 可以使用正則的匹配 df.filter(df.name.rlike('ice$')).collect()
Column.startswith(other)  # df.filter(df.name.startswith('Al')).collect()
Column.substr(startPos, length)  # df.select(df.name.substr(1, 3).alias("col")).collect()
4、DataFrame的一些思路變換操作APIs
# DataFrame.createOrReplaceGlobalTempView
# DataFrame.dropGlobalTempView
# 創(chuàng)建全局的試圖,注冊(cè)后可以使用sql語(yǔ)句來(lái)進(jìn)行操作,生命周期取決于Spark application本身
df.createOrReplaceGlobalTempView("people")
spark.sql("select * from global_temp.people where sex = 'M' ").show()
# +-----+---+-----+---+
# | name|age|score|sex|
# +-----+---+-----+---+
# |  Sam| 28|   88|  M|
# |Peter| 55|  100|  M|
# +-----+---+-----+---+

# DataFrame.createOrReplaceTempView
# DataFrame.dropTempView
# 創(chuàng)建本地臨時(shí)試圖,生命周期取決于用來(lái)創(chuàng)建此數(shù)據(jù)集的SparkSession
df.createOrReplaceTempView("tmp_people")
spark.sql("select * from tmp_people where sex = 'F' ").show()
# +-----+---+-----+---+
# | name|age|score|sex|
# +-----+---+-----+---+
# |Flora| 28|   90|  F|
# |  Mei| 54|   95|  F|
# +-----+---+-----+---+

# DataFrame.cache\DataFrame.persist
# 可以把一些數(shù)據(jù)放入緩存中,default storage level (MEMORY_AND_DISK).
df.cache()
df.persist()
df.unpersist()

# DataFrame.crossJoin
# 返回兩個(gè)DataFrame的笛卡爾積關(guān)聯(lián)的DataFrame
df1 = df.select("name""sex")
df2 = df.select("name""sex")
df3 = df1.crossJoin(df2)
print("表1的記錄數(shù)", df1.count())
print("表2的記錄數(shù)", df2.count())
print("笛卡爾積后的記錄數(shù)", df3.count())
# 表1的記錄數(shù) 5
# 表2的記錄數(shù) 5
# 笛卡爾積后的記錄數(shù) 25

# DataFrame.toPandas
# 把SparkDataFrame轉(zhuǎn)為 Pandas的DataFrame
df.toPandas()

# DataFrame.rdd
# 把SparkDataFrame轉(zhuǎn)為rdd,這樣子可以用rdd的語(yǔ)法來(lái)操作數(shù)據(jù)
df.rdd
5、DataFrame的一些統(tǒng)計(jì)操作APIs
# DataFrame.cov
# 計(jì)算指定兩列的樣本協(xié)方差
df.cov("age""score")
# 324.59999999999997

# DataFrame.corr
# 計(jì)算指定兩列的相關(guān)系數(shù),DataFrame.corr(col1, col2, method=None),目前method只支持Pearson相關(guān)系數(shù)
df.corr("age""score", method="pearson")
# 0.9319004030498815

# DataFrame.cube
# 創(chuàng)建多維度聚合的結(jié)果,通常用于分析數(shù)據(jù),比如我們指定兩個(gè)列進(jìn)行聚合,比如name和age,那么這個(gè)函數(shù)返回的聚合結(jié)果會(huì)
# groupby("name", "age")
# groupby("name")
# groupby("age")
# groupby(all)
# 四個(gè)聚合結(jié)果的union all 的結(jié)果

df1 = df.filter(df.name != "Run")
print(df1.show())
df1.cube("name""sex").count().show()
# +-----+---+-----+---+
# | name|age|score|sex|
# +-----+---+-----+---+
# |  Sam| 28|   88|  M|
# |Flora| 28|   90|  F|
# |Peter| 55|  100|  M|
# |  Mei| 54|   95|  F|
# +-----+---+-----+---+
# cube 聚合之后的結(jié)果
# +-----+----+-----+
# | name| sex|count|
# +-----+----+-----+
# | null|   F|    2|
# | null|null|    4|
# |Flora|null|    1|
# |Peter|null|    1|
# | null|   M|    2|
# |Peter|   M|    1|
# |  Sam|   M|    1|
# |  Sam|null|    1|
# |  Mei|   F|    1|
# |  Mei|null|    1|
# |Flora|   F|    1|
# +-----+----+-----+


嘻嘻,恭喜你讀完啦,獎(jiǎng)勵(lì)你一首歌,一起加油。


瀏覽 45
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 久久夜色视频网| 艹逼视频网站| 欧美日韩有码视频网址大全| 亚洲二区视频| 免费看一区二区三区| 91香蕉视频在线| 色骚爽大香蕉91| 六月婷婷七月丁香| 3D精品啪啪一区二区三区| 天堂俺去俺来也www久久婷婷 | 黄网| 河南熟妇搡BBBB搡BBBB| 超碰c| 激情五月婷婷网| 亚洲调教| 精品一区二区三区四区| 蜜臀av网| 婷婷狠狠爱| 亚洲av偷拍| 色播五月丁香| 蜜臀久久99精品久久久久久牛牛| 婷婷国产成人精品| 乱伦五月| 日韩中文字幕在线| 国产美女福利| 全国最大成人网站| 亚洲AV无码成人精品区www| 91蜜桃网| 中文字幕在线播放AV| 狠狠操免费视频| 婷婷五月天影院| av一区在线观看| 日韩欧美操逼| 99视频免费在线| 国内精品卡一卡二卡三| 人妻无码一区二区三区免费| 国产无码AV在线| 国产免费一区二区三区四区六区在线 | 2024AV在线| 中文字幕一区二区三区精华液| 自拍偷拍1| 人人爽人人爱| 蜜桃精品久久久| 日韩精品一二区| 狠狠干| 最新免费一区二区三区| 国产av激情| 99操逼视频| 亚洲综合免费观看高清完整版| 精品蜜桃秘一区二区三区观看| 京东一热本色道久久爱| 国产精品伦理| 亚洲精品无码a片| 久久1234| 中文字幕久热| 2014亚洲天堂| 日韩黄网| 国产成人精品无码片区在线观91| 欧美黄片一区| 日韩无码久| 激情操逼网| 欧洲肥胖BBBBBBBBBB| 亚洲无码www| 中文字幕高清在线中文字幕中文字幕| 国产卡一卡二| 久久久18禁一区二区三区精品| 亚洲AV无码国产综合专区| 日韩三级片av| 日本一级大毛片a一| www.99免费视频| 无码成人AV| 久久综合加勒比| 黄色视频网站在线观看免费| 精品一本道| a片网| 国产18禁网站| 国产啊啊啊| 成人先锋| 曰本精品综合网在线| 在线中文字幕AV| 午夜福利电影无码| 伊人久久免费视频| 香蕉视频成人在线观看| 国产精品秘久久久久久免费播放| 天天操比| 人妻77777| 色热热| 高清无码网| 亚洲黄色免费网站| 一级黄色A片视频| 在线观看国产| 亚洲欧美网站| 久久天堂一区| 天堂免费视频| 国产操逼图| 久久99精品国产.久久久久| 思思操| 91乱了伦国产乱子伦| 夜夜躁狠狠躁日日躁av| 一区二区三区四区在线看| 日本一级婬片A片免费看| 国产黄色免费观看| 日韩成人不卡| 苗条一区小视频| 深爱五月激情| 国产精品国产三级国产AⅤ| 91成人精品一区在线播放| 成人性爱在线播放| 老女人操屄| 69视频网站| 一级性爽AV毛片| 国内无码精品| 日韩色情视频| 久久中文娱乐网| 国产久久精品视频| 18禁日韩| 日本人妻在线视频| 99视频免费在线| 色接久久| 国产精品日韩无码| 丁香婷婷五月基地| 色色色色色欧美| 欧美亚洲在线| 性爱视频久久| 午夜H片| 国产精品成人AV在线| 婷色五月天| av在线小说| 久久久国产视频| 四lll少妇BBBB槡BBBB| 91色| 久久黄色毛片| 国产精品无码无套在线| 影音av资源| 久久伊人春色| 亚洲AV在线免费观看| 911国产精品| 欧美性久久久久| 骚逼AV| 国产一区二区三区四区五区在线| 久久综合大香蕉| 奶大丰满一乱一视频一区二区三区在 | 欧美亚韩一区二区三区| 久久伊人草| 53岁露大奶熟女偷情贴吧| 亚洲国产97| 99操逼| 色五月婷婷在线| 午夜免费小视频| 日屄在线观看| AV中文在线| 中文在线永久免费观看| 草草影院国产第一页| 99热高清| 色av网| 成人无码中文字幕| 欧美亚洲日韩中文字幕| 一级黄视频| 中文字幕无码一区二区三区一本久| 五月天干美女| 日韩中文字幕AV| 影音先锋AV在线资源| 久久国产乱子伦精品免费午夜... 国产毛片精品一区二区色欲黄A片 | 91在线无码精品秘入口国战| 在线观看视频国产| 色噜噜狠狠一区二区三区| 搞黄免费视频视频| 中文字幕视频在线| 91人人妻人人澡人人爽| 无码专区在线观看| 91中文字幕网| 午夜精品一区二区三区在线成人| 一本一道vs波多野结衣| 国产无码免费视频| 天堂中文资源库| AV偷拍| 在线观看中文字幕一区| 成人黄网站免费观看| 欧美精品A级片| 91午夜福利| 亚洲第一页在线| 亚洲精品熟女| 欧美日韩精品一区| 日韩成人一级片| 免费在线观看视频a| 麻豆传媒一区| 在线成人视频网站大香蕉在线网站| 欧美色图15p| 欧美不卡一区| 五月婷婷一区| 天天日天天射天天操| 青青草97国产精品麻豆| 国产亲子乱XXXXinin| 亚洲秘av无码一区二区| 日韩a在线观看| 天天干,天天日| 91视频福利网| 91丨人妻丨国产| 中文字幕乱码免费综合久久| 国产午夜视频| 青春草在线视频| 久久久91| 亚洲午夜福利在线观看| 国产黄在线观看| 午夜不卡视频| 91成人电影在线| 日韩有码在线观看| 操操干| 微熟女地址导航| 久草网视频| 北岛玲丝袜办公室高跟| 欧美色图视频在线观看| 国模无码在线| 国产AVwww| 久久思热国产| 麻豆传媒一区| 免费v在线观看| 日本一区二区精品| 国产aaaaaaaaaaaaa| 国产资源网| 综合色综合| 欧美激情婷婷| 女公务员人妻呻吟求饶| www.wuma| 黄片中文| 伊人二区| 7777精品伊人久久7777| 91三级片在线播放| 激情日韩| 爱爱视频天天操| 玖玖色视频| 91久久无码一区人妻A片蜜桃| 日韩一级内射| 黃色一級片黃色一級片尖叫声-百度-百 | 免费涩涩无遮挡18国产| 人妻精品综合码| 日韩免费成人视频| 国产嘿嘿| 国产丝袜av| 超碰93| 思思热在线观看视频| 俺去俺来也在线www色情网| 国产精品一区二区在线观看| 少妇bbb搡bbbb搡bbbb| 一区二区三区久久久久〖网:.〗 | 国产91无码精品秘入口| 91久久婷婷亚洲精品成人| 久艹大香蕉| 不卡日韩| 免费无码在线| 97精品在线| 搡BBBB搡BBB搡我瞎了| 婷婷日韩| 特黄特黄免费看| 日韩中文久久| 台湾色综合| 免费视频爱爱| 无码专区中文字幕| 久久精品国产精品| 婷婷AV在线| 唐山熟女工棚嗷嗷叫| 国产福利视频在线观看| 久久久久久无码日韩欧美电影| 蜜桃视频网站在线观看| 亚洲videos| 超碰人| 99精品免费在线观看| 蜜臀精品一区二区三区| 人人操在线观看| 天天撸视频| 91大神免费观看| 一级片三级片| 91吴梦梦无码一区二区| 国产无套进入免费| 精品一区二区ww| 综合无码| 婷婷亚洲精| 在线免费亚洲视频| 一边做一边说国语对白| 欧美自拍视频在线| 91欧美在线| 中文字幕在线观看av| 女人的天堂AAA| 激情五月丁香花| 黄av在线| 日韩人妻无码一区二区三区 | 国产成人黄色| 成人黄网免费观看视频| 日本不卡三区| 99九九99九九九99九他書對 | 九九九九AV| 五月激情婷婷网| 黄色视频网站在线看| 欧美成人激情视频| 少妇搡BBBB搡BBBB毛多多| 炮友露脸青楼传媒刘颖儿| 调教人妻视频| 亚洲a电影| 黄色成人网站在线播放| 一夲道无码专区av无码A片| 免费一级婬片AAA片毛片A级| 91大吊| 欧美成人高清视频| 天天干天天撸| 中文无码日韩| 欧美成a| 粉嫩小泬BBBB免费看-百度| 国内自拍视频在线观看| 日韩在线中文字幕亚洲| 亚洲加勒比久久88色综合| 一本色道久久综合无码| 日韩免费A片| 日本三级片网站在线观看| 日本国产黄色| 成人av中文字幕| 成人AV无码| 欧美日韩一区二区三区四区五区六区| aaa三级黄片| AV不卡在线| 亚洲中文字幕在线观看| 久艹AV| 色婷婷老师| 丰满少妇一区二区三区| 日韩精品欧美一区二区三区| 天天色天天撸| 色婷婷一区二区三区久久午夜 | 91蝌蚪视频在线观看| 乱伦专区| 黄色大片免费网站| 国产又爽又黄免费网站在线| 99视频免费| 丰满大爆乳波霸奶| 精品久久久国产| 国产91无码网站在线观看| 精品免费黄色视频| 五月丁香婷婷色色| 青青草在线视频免费观看| 久久嫩草精品| 无码精品成人观看A片| 外国一级片| 黄频在线免费观看| www.丁香五月| 日本黄色电影网址| 久久久久中文字幕| 91视频免费播放| 日韩无码网| 加勒比一区二区三区| 99九九久久| 永久免费看A人片无码精| 久久国产乱子伦精品免费午夜...| 色五月综合网| 精品无码二区| 91插插插插| 亚洲免费中文字幕| 无码电影视频| 久久久久精| 日韩性爱在线| 国内自拍视频网站| 久久久网| 91人人妻人人妻人人澡| 欧美一级免费观看| 一本久久A精品一合区久久久 | 五月激情丁香| 免费观看黄色在线视频| 俺来也俺去了| 黄色一级生活片| 黄色视频在线观看免费网站 | 久久视频这里有精品| 中文乱伦视频| 松岛枫在线视频| 亚洲乱码在线观看| 91麻豆国产在线观看| 韩国人妻无码| 天堂资源在线| 青青草原成人视频| 大香蕉操逼| 国产亚洲无码激情| 山东wBBBB搡wBBBB| 国产中文字幕在线免费观看| 91久久综合亚洲鲁鲁五月天| 色婷婷香蕉| 亚洲精品一区二区三区在线观看 | 超碰在线人人| 影音先锋成人| 91中文字幕在线播放| 蜜臀久久99精品久久久久久牛牛| 激情久久AV一区AV二区AV三区| 日韩爱爱| 国产精品扒开腿做爽爽爽视频| 国产高清无码免费| 日韩欧美亚洲一区二区三区| 影音先锋三级| 自拍偷拍亚洲无码| 日本黄色A片| 亚洲a电影| 大香蕉国产精品| 狠狠躁日日躁夜夜躁A片男男视频| 三级视频在线播放| 天堂色色| 女人的天堂AV在线观看| 97人人精品| 日本三级AAA三级AAAA97| 97久久人人| 国产三级黄色片| 成人三级片免费| 男女操逼视频网站免费观看| 日韩大片在线观看| va色婷婷亚洲在线| 免费亚洲无码| 日本黄色片在线播放| 人人妻人人草| 特级西西人体444www高清大胆| 日韩无码中文字幕| 2025av在线| 黄一级| 少妇搡BBBB搡BBB搡视频一级| 日逼免费| 精品无码一区二区三区四区| 国产精品免费观看久久久久久久久| 亚洲成人福利在线| 粉嫩av懂色av蜜臀av分享| 日日爱网| 在线观看高清无码视频| 操操片| 中文字幕免费看高清| 黄片日逼| PORNY九色视频9l自拍| 香蕉综合网| 无码人妻一区二区三区免水牛视频 | 十八禁视频在线观看网站.www| 国产综合色婷婷精品久久| 亚洲精品成人7777777| 国产精品美女久久久久久久久| 丁香五月网| 人人操比| 日本在线视频不卡| 天天干天天日天天干| 亚洲撸撸| 国产wwwww| av无码高清| 国产精品一区二区三区在线| 中国黄色一级A片| 日韩爱爱视频| 亚洲精品色婷婷| 天天爽日日澡AAAA片| 伦理被部长侵犯HD中字| 日日爱网| 婷婷丁香六月| 黄色特级毛片| 日韩精品中文无码| 亚洲精品一区二区二区的游戏情况| 九九色九九| 四虎在线免费视频| 看一级黄色毛片| 日本免费a片| 中文字幕99页| 操国产美女| 日韩无码人妻| 男女做爱视频网站| 无码做爱视频| 中文字幕日韩无码片| 91天天干| 亚洲最大视频| 五月天激情片| 91香蕉| 亚洲视频免费播放| 豆花天天吃最新视频| 免费观看黄色AV| 日韩三级片av| 婷婷色在线| 国产a毛片| 夜夜骚av.一区二区三区四区 | 91av久久| 经典三级在线视频| 精品视频久久久久久| 久久三级电影| 亚洲无码99| 影音先锋女人av噜噜色| 久久久久一区二区三区| 国产一级影院| 亚洲福利视频网| 人人操人人搞| 日韩人妻在线播放| 午夜无码免费| 在线一区二区三区四区| 成人视频在线观看黄色18| 久久免费视频,久久免费视频| 色婷婷在线视频播放| 亚洲高清国产欧美综合s8| 一区二线视频| 欧美一级网| 国产免费一级片| 五月激情六月婷婷| 日韩午夜无码| A级片黄色片| 三级片久久| 九九热在线观看| 婷婷色色婷婷| 91热久久| 国产午夜激情视频| av免费观看网址| 国产乱子伦-区二区| 无码中文字幕高清| 日韩三级毛片| 豆花视频成人| 亚洲无码蜜桃| 黄片欧美| 伊人大香蕉网站| 91无码高清视频| 国产一区二区三区成人| 亚洲天媒在线播放| 91精品人妻一区二区三区蜜桃| 操小骚逼视频| 男人天堂视频网| 五月天高清无码| 久久视频一区| 亚洲AV无码成人精品一区| 91视频网| 青青草原AV| 成人无码区免费A片| 亚洲综合干| 午夜福利100理论片| 国产激情综合在线| 91麻豆精品91久久久久同性 | 五月丁香婷中文字幕| 欧美操B在线| 日韩女人性爱| 日韩无码视频一区| 日本精品码喷水在线看| 在线视频免费观看| 成人精品一区二区区别解析| 久久久69| 精品无码9| 国产精品偷拍视频| 樱桃码一区二区三区| 国产毛片一照区| 五月天激情网站| 国产ts在线| 26∪u∪成人网站| 一级全黄120分钟免费| 在线久草| 北京熟妇搡BBBB搡BBBB| jizz日韩| 18禁一区二区| 久久精彩免费视频| 五月天综合久久| 青青日逼| 欧美日韩一级黄色片| 91人体视频| 人妻少妇被猛烈进入中文字幕| 国产婷婷久久Av免费高清| 久久一区| 欧美日韩三级| 伊人毛片| 无码视频网站| 草草网| 国产成人在线播放| 蜜臀久久| 免费AA片| 亚洲有码在线观看| 九九国产视频| 成人三级电影| 成人网站在线看| 国产麻豆AⅤMDMD0071| 欧美色大香蕉| 日P免费视频| 日本少妇激情视频| 悠悠色导航| 人人摸在线视频| 国产嘿嘿| 日韩无码高清一区| 亚欧三级| 91人妻人人澡人人| 欧亚av| 少妇免费视频| 久久黄色视频| 男女高清无码| 免费看黄色录像| 麻豆91蜜桃传媒在线观看| 免费黄色视频网站在线观看| 新版欧美内射大全| 影音先锋av资源网站| 91人人人| 免费黄色A片| 国产精品一二三| 日韩一欧美| 无码视频一二三区| 成年人黄色在线观看| 久久学生妹| 91国产视频在线观看| av在线一区二区| 国产免费一区二区在线A片视频| 伊人色女操穴综合网| 另类色| 秋霞欧美在线| 日韩av高清| 一区二区国产精品| 免费看黃色AAAAAA片| 国产69精品久久久久久久久久久久 | 欧美深夜福利视频| 大香蕉在线看| 久久精品中文| 亚洲AV成人无码久久精品麻豆| 九七影院第二页| 蝌蚪窝免费在线视频| 在桌下含她的花蒂和舌头H视频| 国产无遮挡又黄又爽又色| 精品自拍偷拍| 国产黄色三级片| 免费黄色大片网站| 亚洲三级黄片| 成年人在线播放| 欧美97| 精品福利导航| 人妻北条麻妃在线| 日韩免费成人视频| 丰满人妻无码| 爱草视频| 色婷婷视屏| 五月激情婷婷网| 免费欧美A片| 无码人妻丰满熟妇区毛片视频| i美女福利视频| 丁香婷婷六月| 色噜噜一区二区| 18禁网站免费观看| av在线中文| 九一九色国产| 四川BBBB擦BBBB| 成人女人18女人毛片| 男人日女人视频| 欧美一级成人片| 男女福利视频| 精品无码三级在线观看视频| 久久久久三级| 91精产国品一二| 99久热| 亚洲无线观看| 成人日韩| 天天操中文字幕| 精品一区二区视频| 骚逼综合| 成人特级毛片| www男人的天堂| 7777AV| 亚洲中文字幕网站| 91视频人人| 热的无码| 色天使av| 午夜骚影| 日韩在线一级| 国产精品粉嫩福利在线| 亚洲无码在线视频观看| 大香蕉在线75| 色色色色五月| 潮喷在线观看| 亚洲精品女人久久久| 91人妻人人澡人人爽人妻| 熟女少妇视频| 中文字幕无码成人| 欧美囗交大荫蒂免费| 尤物在线免费视频| 小明看台湾成人永久免费视频网站| 草逼视频免费看| 中文字幕无码在线观看视频| 欧美精品乱码99久久蜜桃 | 91无码人妻精品一区二区三区四| 伊人日逼| A级黄色毛片| 在线观看中文字幕无码| 精品国产AV无码一区二区三区| 青娱乐在线精品| 妞干网国产| 美女黄视频网站| 久久激情av| 日韩久久婷婷| 婷婷色六月| 欧美成人AA| 日韩一本| 国产精品秘久久久久久| 日韩无码123| 麻豆精品在线观看| 韩国精品在线观看| 草逼国产| 琪琪色在线视频| 国产一级a一级a免费视频| 干欧美| 国模吧一区| 黃色一级A片一級片| 亚洲免费在线观看视频| 91精品人妻一区二区三区蜜桃| 欧美手机在线| 蜜桃视频一区二区三区| 久久91久久久久麻豆精品| 看一级黄色毛片| 欧美亚洲系列| 日本www视频| 丁香六月婷| 亚洲视频在线观看网站| 久草视频在线免费看| 欧美成人一级片| 亚洲日韩三级| 18禁av在线| 久久久久久久久国产精品| 99在线精品视频免费观看20| 真实国产乱子伦毛片| 色五月视频| 欧美一级日韩一级| 四虎永久在线精品无码| 狼人色影院| 成人精品A片免费网站| 日韩黄色A片| av天堂小说网| 91久九九| 欧洲亚洲在线| 国产综合网站| A视频在线免费观看| 久久久福利视频| www.麻豆网91成人久久久| 五月天激情网站| 青青草资源站| 操逼网站在线| 嘿咻嘿咻动态图| www.91madou| 蝌蚪久久| 嫰BBB槡BBBB槡BBBB| 国产又爽又黄在线看视频| 黄色国产av| 泄火熟妇2-ThePorn| 老骚老B老太太A片| 撸撸操在线视频观看只有精品| 操逼色| 97欧美日韩| 偷拍无码| 青青草精品在线视频| 国产黄色性爱视频| 久草加勒比| 亚洲日韩久久| 亚洲天媒在线播放| 日韩欧美国产黄色电影| 草逼网视频| 欧洲三级网观看| 操学生妹| 综合国产| 久久成人免费| 欧美成人A片| 国产一区二区久久| 亚洲狼人久久久精品| 91精品丝袜久久久久久| 亚洲综合在线播放| 成人亚洲A片V一区二区三区蜜月| 精品欧美一区二区精品久久| 黄色片视频网站| 国产无套在线观看| 西西444WWW无码视频软件| 黄色综合网站| 高清无码免费不卡| a视频| AV无码免费观看| 国产福利视频在线观看| 黄色激情AV| 在线一区视频| 狠狠干综合网| 大香蕉超碰在线| 婷婷五月天综合网| 操逼网123| 国产青娱乐在线视频| 日本黄色片在线播放| 中文无码在线观看中文字幕av中文 | 午夜黄片| 国产精品3| 污视频网站免费在线观看| 2026国产精品视频| 日韩伊人| 天堂综合网| 国产精品外围| 色婷婷狠狠操| 毛片在线免费| 熟女91视频| 神马午夜精品96| 在线中文字幕777| aⅴ免费观看| 久久精品999| 国产精品夜夜爽7777777| 日韩AV电影在线观看| 亚洲AV五月天在线| 精品久草| 欧美日韩中文字幕在线视频| 亚洲无码精品一区二区| 黄色www| 日韩一欧美| 久久精品视频免费看| 91成人视频在线免费观看| 福利导航在线| 亚洲日韩AV无码专区影院| 青青草手机视频在线| 日韩在线中文字幕| 精品一区二区三区在线观看| 国产成人免费在线| 99在线观看视频| 国产91www| 丁香天堂| 国产资源在线观看| 国产精品视频久久| 免费成人国产| 51妺嘿嘿午夜福利视频| 无码日韩视频| 日韩成人综合| 毛片在线看片| 一本色道久久综合无码人妻四虎| 亚洲AV性爱| 人人色综合| 欧美成人A级片| 欧美色女人| 四川少妇BBBB| 色一区二区三区| 88国产精品| 国产香蕉视频在线播放| 白嫩外女BBwBBwBBw| 外国一级片| 国产AV日韩| 一区二区三区www污污污网站| 色拍拍视频| www色色| 噜噜噜网| 欧美极品另类| 久操视频在线免费观看| 欧美一级黄色片| 免费无码国产在线怀| 亚洲精品久久久久久久久蜜桃| 亚洲黄色在线视频| 国产激情艹逼| 亚洲五月天色| 日日干日日干| 亚洲中文字| 一道本视频在线免费观看| 日韩高清成人无码| 456亚洲影院| 69无码| 色婷婷在线视频播放| 潮喷在线观看| 中文字幕一区二区三区精华液| 国产A片免费视频| 亚洲AV人人夜夜澡人人| 亚洲久久久久久| 成人视频网站在线观看18| 亚洲无码久久网| 先锋影音av资源站| 91久久99久久91熟女精品| 伊人性视频| 青青操成人在线视频| 一区二区三区四区免费| 亚洲va综合va国产va中文| 91无码影院| a片在线免费看| 国产中文字幕在线观看| 乱伦一区二区三区| 亚洲免费黄片| 中文字幕一区二区三区四区| 日皮视频在线观看免费| 久久大屌| 大鸡巴在线观看| 国产精品夜夜爽3000| 四虎操逼| 俺也去在线视频| 豆花无码视频一区二区| 神马午夜精品91| 日韩在线不卡视频| 在线观看毛片网站| 亚洲国产成人在线视频| 岛国AV免费看| 97这里只有精品| 精品国产毛片| 欧美日韩国产一区二区| 国产精品外围| 日本在线一区二区| 黄片福利| 淫色综合网| 黄色免费一级片| 美女一区| 久久久精品少妇| 亚洲人天堂| 三级片自拍| 色婷婷狠狠操| 国产在线视频一区| 内射午夜福利在线免费观看视频 | 欧美韩日一区二区| av手机版| 加勒比DVD手机在线播放观看视频 日韩精品一区二区三区四区蜜桃视频 | 国产高清AV在线| 巜痴漢電車~凌脔版2| 亚洲中字幕新| 先锋资源久久| 熟女视频网站| 成人精品A片免费网站| 最新中文字幕av| 亚洲日韩视频在线观看| 国产精品做爱| 欧美在线免费观看| 中文字幕在线观看辣文|