Spark SQL和DataFrames重要的类有:
- pyspark.sql.SQLContext: DataFrame和SQL方法的主入口
- pyspark.sql.DataFrame: 将分布式数据集分组到指定列名的数据框中
- pyspark.sql.Column :DataFrame中的列
- pyspark.sql.Row: DataFrame数据的行
- pyspark.sql.HiveContext: 访问Hive数据的主入口
- pyspark.sql.GroupedData: 由DataFrame.groupBy()创建的聚合方法集
- pyspark.sql.DataFrameNaFunctions: 处理丢失数据(空数据)的方法
- pyspark.sql.DataFrameStatFunctions: 统计功能的方法
-pyspark.sql.functions DataFrame:可用的内置函数
- pyspark.sql.types: 可用的数据类型列表
- pyspark.sql.Window: 用于处理窗口函数
6.class pyspark.sql.DataFrameNaFunctions(df):在DataFrame中处理丢失的数据的功能
6.1.drop(how='any',thresh=None,subset=None):返回一个新的DataFrame,省略含有空值的行。DataFrame.dropna()和 DataFrameNaFunctions.drop()是彼此的别名。
1.how:'any'或者'all'.如果为'any', 如果它包含任何空值,则丢掉一行。如果为'all',只有当它的所有值都为空时才丢掉一行。
2.thresh:默认值为None,如果指定为int,删除小于阈值的非空值的行。 这将覆盖how参数。
3.subset:要考虑的列名的可选列表。
>>> l4=[('Alice',10,80),('Bob',5,None),('Tom',None,None),(None,None,None)]
>>> df4 = sqlContext.createDataFrame(l4,['name','age','height'])
>>> df4.na.drop().show()
+-----+---+------+
| name|age|height|
+-----+---+------+
|Alice| 10| 80|
+-----+---+------+
6.2.fill(value,subset=None):DataFrame.fillna()和DataFrameNaFunctions.fill()是彼此的别名。
1.value:整形,长整形,浮点型,字符串,或者字典。用来替换空值的值。如果值是字典,则subset将被忽略,值必须是从列名(字符串)到要替换值的映射。替换值必须是整形,长整形,浮点型或字符串。
2.subset:要替换的列名的可选列表。在subset指定的列,如果不具有匹配的数据类型会被忽略。例如,如果value是一个字符串,并且subset包含一个非字符串列,那么非字符串列将被忽略。
df4.na.fill(50).show()
+-----+---+------+
| name|age|height|
+-----+---+------+
|Alice| 10| 80|
| Bob| 5| 50|
| Tom| 50| 50|
| null| 50| 50|
+-----+---+------+
df4.na.fill({'age': 50, 'name': 'unknown'}).show()
+-------+---+------+
| name|age|height|
+-------+---+------+
| Alice| 10| 80|
| Bob| 5| null|
| Tom| 50| null|
|unknown| 50| null|
+-------+---+------+
6.3.replace(to_replace,value,subset=None):返回用另外一个值替换了一个值的新的DataFrame。DataFrame.replace() 和 DataFrameNaFunctions.replace()是彼此的别名。
1.to_replace:整形,长整形,浮点型,字符串,或者列表。要替换的值。如果值是字典,那么值会被忽略,to_replace必须是一个从列名(字符串)到要替换的值的映射。要替换的值必须是一个整形,长整形,浮点型,或者字符串。
2.value:整形,长整形,浮点型,字符串或者列表。要替换为的值。要替换为的值必须是一个整形,长整形,浮点型,或者字符串。如果值是列表或者元组,值应该和to_replace有相同的长度。
3.subset:要考虑替换的列名的可选列表。在subset指定的列如果没有匹配的数据类型那么将被忽略。例如,如果值是字符串,并且subset参数包含一个非字符串的列,那么非字符串的列被忽略。
>>> l4=[('Alice',10,80),('Bob',5,None),('Tom',None,None),(None,None,None)]
>>> df4 = sqlContext.createDataFrame(l4,['name','age','height'])
>>> df4.na.replace(10, 20).show()
+-----+----+------+
| name| age|height|
+-----+----+------+
|Alice| 20| 80|
| Bob| 5| null|
| Tom|null| null|
| null|null| null|
+-----+----+------+
>>> df4.na.replace(['Alice', 'Bob'], ['A', 'B'], 'name').show()
+----+----+------+
|name| age|height|
+----+----+------+
| A| 10| 80|
| B| 5| null|
| Tom|null| null|
|null|null| null|
+----+----+------+