Spark SQL和DataFrames重要的類有:
- pyspark.sql.SQLContext: DataFrame和SQL方法的主入口
- pyspark.sql.DataFrame: 將分布式數(shù)據(jù)集分組到指定列名的數(shù)據(jù)框中
- pyspark.sql.Column :DataFrame中的列
- pyspark.sql.Row: DataFrame數(shù)據(jù)的行
- pyspark.sql.HiveContext: 訪問Hive數(shù)據(jù)的主入口
- pyspark.sql.GroupedData: 由DataFrame.groupBy()創(chuàng)建的聚合方法集
- pyspark.sql.DataFrameNaFunctions: 處理丟失數(shù)據(jù)(空數(shù)據(jù))的方法
- pyspark.sql.DataFrameStatFunctions: 統(tǒng)計功能的方法
-pyspark.sql.functions DataFrame:可用的內(nèi)置函數(shù)
- pyspark.sql.types: 可用的數(shù)據(jù)類型列表
- pyspark.sql.Window: 用于處理窗口函數(shù)
6.class pyspark.sql.DataFrameNaFunctions(df):在DataFrame中處理丟失的數(shù)據(jù)的功能
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參數(shù)。
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指定的列翰意,如果不具有匹配的數(shù)據(jù)類型會被忽略。例如信柿,如果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:整形,長整形,浮點型,字符串或者列表。要替換為的值途乃。要替換為的值必須是一個整形,長整形,浮點型,或者字符串绍傲。如果值是列表或者元組,值應(yīng)該和to_replace有相同的長度。
3.subset:要考慮替換的列名的可選列表耍共。在subset指定的列如果沒有匹配的數(shù)據(jù)類型那么將被忽略烫饼。例如,如果值是字符串,并且subset參數(shù)包含一個非字符串的列,那么非字符串的列被忽略。
>>> 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|
+----+----+------+