We-Co

[We-Co] Spark Dataset 액션연산 본문

Spark

[We-Co] Spark Dataset 액션연산

위기의코딩맨 2021. 9. 8. 23:27
반응형

안녕하세요. 위기의코딩맨입니다.

오늘은 액션에 대해 간단하게 알아보고 액션 연산에 사용되는 함수들을 알아보도록 하겠습니다.

 

Dataset이나 RDD는 트랜스포메이션 연산과 액션연산이 사용되며, 

액션 연산이 실행될 때, 실제 연산이 실행됩니다.

액션 연산이 호출되어야만 트랜스포메이션 연산의 결과를 확인할 수 있습니다.

 

scala> case class Person(name:String, age: Int, job:String)
defined class Person 
scala> val row = Person("Person_1",5,"student")
row: Person = Person(Person_1,5,student) 
scala> val row2 = Person("Person_2",10,"student")
row2: Person = Person(Person_2,10,student) 
scala> val row3 = Person("Person_3",15,"programmer")
row3: Person = Person(Person_3,15,programmer) 
scala> val data = List(row,row2,row3)
data: List[Person] = List(Person(Person_1,5,student), Person(Person_2,10,student), Person(Person_3,15,programmer))

 

해당 예제 소스로 연산들을 알아보도록 하겠습니다. 

 

[ show() ]

scala> df.show
21/09/08 23:01:52 INFO CodeGenerator: Code generated in 324.0732 ms
21/09/08 23:01:52 INFO CodeGenerator: Code generated in 26.73 ms
+--------+---+----------+
|    name|age|       job    |
+--------+---+----------+
|Person_1|  5|   student   |
|Person_2| 10|   student   |
|Person_3| 15|programmer|
+--------+---+----------+

 

Dataset에 저장된 내용을 출력해서 보여주는 역할을 합니다.

show는 2가지의 인자를 받을수 있는데

첫번째는 보여줄 로우의 수를 지정할 수 있습니다.

두번째는 true, false를 인자로 받는데 칼럼의 내용이 긴 경우 이를 짧게 잘라서 출력할 지를 설정합니다.

 

[ head(), first() ]

scala> df.head()
21/09/08 23:07:05 INFO CodeGenerator: Code generated in 12.1459 ms
21/09/08 23:07:05 INFO CodeGenerator: Code generated in 13.8904 ms
res2: org.apache.spark.sql.Row = [Person_1,5,student]

scala> df.first()
res3: org.apache.spark.sql.Row = [Person_1,5,student]

 

Dataset에 저장되어 있는 로우 중 첫번째 로우를 돌려주는 역할을 합니다.

 

[ take() ]

scala> df.take(2)
res4: Array[org.apache.spark.sql.Row] = Array([Person_1,5,student], [Person_2,10,student])

 

take()는 Dataset의 n개의 로우를 돌려주는 역할을 합니다. 여기서 중요한건 Array로 돌려준다는 것입니다.

 

[ count() ]

scala> df.count()

res5: Long = 3

 

RDD의 count()와 같은 역할을 하며, Dataset에 포함된 로우의 개수를 반환합니다.

 

 

[ collect(), collectAsList()

scala> df.collect()
res6: Array[org.apache.spark.sql.Row] = Array([Person_1,5,student], [Person_2,10,student], [Person_3,15,programmer])

scala> df.collectAsList
res9: java.util.List[org.apache.spark.sql.Row] = [[Person_1,5,student], [Person_2,10,student], [Person_3,15,programmer]]

 

Dataset에 포함된 모든 데이터를 collect()는 배열, collectAsList()는 리스트의 형태로 반환합니다.

 

[ describe() ]

scala> df.describe("age").show

+-------+----+
|summary| age|
+-------+----+
|  count|   3   |
|   mean|10.0 |
| stddev| 5.0  |
|    min|   5   |
|    max|  15  |
+-------+----+

 

숫자형 칼럼의 기초 통계 값인 총 값, 평균, 표준편차, 최솟값, 최대값을 포함하는 Dataframe을 생성하게 됩니다.

다른 액션들과 달리 Dataframe의 타입으로 반환되는 특징이 있습니다.

 

 

 

오늘은 간단하게 Dataset의 액션 연산자에 대해 알아보았습니다.

Spark에 대해 한 발자국 다가가는 기분...

반응형