본문 바로가기

Data/Data Analysis

[Pyspark] pyspark 함수 정리(2)

반응형

drop(*cols)

dataframe에서 지우고싶은 column이 있을때 해당 함수를 사용한다. 반환되는 값은 삭제가된 이후의 dataframe이 나오게 된다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> df.drop('age').collect()
[Row(name='Alice'), Row(name='Bob')]
 
>>> df.drop(df.age).collect()
[Row(name='Alice'), Row(name='Bob')]
 
>>> df.join(df2, df.name == df2.name, 'inner').drop(df.name).collect()
[Row(age=5, height=85, name='Bob')]
 
>>> df.join(df2, df.name == df2.name, 'inner').drop(df2.name).collect()
[Row(age=5, name='Bob', height=85)]
 
>>> df.join(df2, 'name''inner').drop('age''height').collect()
[Row(name='Bob')]



dropDuplicates 또는 drop_duplicates

dataframe에 중복된 row가 있을경우 중복된것을 삭제해준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> from pyspark.sql import Row
>>> df = sc.parallelize([ \
...     Row(name='Alice', age=5, height=80), \
...     Row(name='Alice', age=5, height=80), \
...     Row(name='Alice', age=10, height=80)]).toDF()
>>> df.dropDuplicates().show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
| 10|    80|Alice|
+---+------+-----+
>>> df.dropDuplicates(['name''height']).show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  5|    80|Alice|
+---+------+-----+


첫번째에는 height과 name이 중복되지만 age가 중복이 안되서 삭제가 안된것이고, 두번째 dropDuplicates는 column을 지정해줘서 중복된값이 삭제된것을 볼 수가 있음


dropna(how='any', thresh=None, subset=None)

null값이 포함된 row를 뺀 새로운 dataframe을 반환해준다

Parameters:
  • how – ‘any’ or ‘all’. If ‘any’, drop a row if it contains any nulls. If ‘all’, drop a row only if all its values are null.
  • thresh – int, default None If specified, drop rows that have less than thresh non-null values. This overwrites the howparameter.
  • subset – optional list of column names to consider.


1
2
3
4
5
6
>>> df4.na.drop().show()
+---+------+-----+
|age|height| name|
+---+------+-----+
| 10|    80|Alice|
+---+------+-----+


dtypes

dataframe의 column별 데이터 타입을 반환해준다

1
2
>>> df.dtypes
[('age''int'), ('name''string')]


printSchema()

dtypes와 비슷하지만 트리형태로 column별 데이터 타입을 반환해줌

1
2
3
4
5
>>> df.printSchema()
root
 |-- age: integer (nullable = true)
 |-- name: string (nullable = true)
<BLANKLINE>


orderBy

지정된 column의 정렬된 DataFrame을 반환
사용법은 여러가지가 있는데 sort()라는 함수도 쓸수가 있다
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> df.sort(df.age.desc()).collect()
[Row(age=5, name='Bob'), Row(age=2, name='Alice')]
>>> df.sort("age", ascending=False).collect()
[Row(age=5, name='Bob'), Row(age=2, name='Alice')]
>>> df.orderBy(df.age.desc()).collect()
[Row(age=5, name='Bob'), Row(age=2, name='Alice')]
>>> from pyspark.sql.functions import *
>>> df.sort(asc("age")).collect()
[Row(age=2, name='Alice'), Row(age=5, name='Bob')]
>>> df.orderBy(desc("age"), "name").collect()
[Row(age=5, name='Bob'), Row(age=2, name='Alice')]
>>> df.orderBy(["age""name"], ascending=[01]).collect()
[Row(age=5, name='Bob'), Row(age=2, name='Alice')]


replace

Dataframe.replace(to_replace, value, subset=None)
형식으로 되어있으며 예시는 다음과 같음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
>>> df4.na.replace(1020).show()
+----+------+-----+
| age|height| name|
+----+------+-----+
|  20|    80|Alice|
|   5|  null|  Bob|
|null|  null|  Tom|
|null|  null| null|
+----+------+-----+
>>> df4.na.replace('Alice', None).show()
+----+------+----+
| age|height|name|
+----+------+----+
|  10|    80|null|
|   5|  null| Bob|
|null|  null| Tom|
|null|  null|null|
+----+------+----+
>>> df4.na.replace({'Alice': None}).show()
+----+------+----+
| age|height|name|
+----+------+----+
|  10|    80|null|
|   5|  null| Bob|
|null|  null| Tom|
|null|  null|null|
+----+------+----+
>>> df4.na.replace(['Alice''Bob'], ['A''B'], 'name').show()
+----+------+----+
| age|height|name|
+----+------+----+
|  10|    80|   A|
|   5|  null|   B|
|null|  null| Tom|
|null|  null|null|
+----+------+----+


반응형

'Data > Data Analysis' 카테고리의 다른 글

[Pyspark] dataframe join 문  (0) 2019.09.16
[Pyspark] pyspark 함수 정리(3)  (0) 2019.01.15
[Pyspark] pyspark 함수 정리(1)  (0) 2019.01.11
[SQL] OVER함수 및 PARTITION BY 사용법  (0) 2019.01.07
[SQL]collect_list 함수 사용  (0) 2019.01.07