달나라 노트

Python pyspark : createDataFrame (spark dataframe 생성하기. pandas dataframe을 spark dataframe으로 변환하기. spark dataframe을 pandas dataframe으로 변환하기) 본문

Python/Python pyspark

Python pyspark : createDataFrame (spark dataframe 생성하기. pandas dataframe을 spark dataframe으로 변환하기. spark dataframe을 pandas dataframe으로 변환하기)

CosmosProject 2021. 5. 19. 04:46
728x90
반응형

 

 

 

pyspark를 이용하면 쿼리를 돌려서 엑셀 형태의 dataframe을 생성하고 다룰 수 있으며

쿼리를 돌리지 않아도 직접 생성할 수 있습니다.

 

 

pyspark에서 dataframe을 생성하는 방법은 여러 가지가 있습니다만,

pandas를 알고있다면 가장 익숙한건 pandas dataframe을 spark dataframe으로 만드는 것입니다.

 

from pyspark.sql import SparkSession
import pandas as pd

spark = SparkSession.builder.getOrCreate() # 1

df_test = pd.DataFrame({ # 2
    'a': [1, 2, 3],
    'b': [10.0, 3.5, 7.315],
    'c': ['apple', 'banana', 'tomato']
})

df_spark = spark.createDataFrame(df_test) # 3

df_spark.show() # 4
df_spark.show(2) # 5
df_spark.printSchema() # 6



-- Result
+---+------+-------+
|  a|     b|      c|
+---+------+-------+
|  1|  10.0|  apple|
|  2|   3.5| banana|
|  3| 7.315| tomato|
+---+------+-------+

+---+------+-------+
|  a|     b|      c|
+---+------+-------+
|  1|  10.0|  apple|
|  2|   3.5| banana|
+---+------+-------+

root
 |-- a: long (nullable = true)
 |-- b: double (nullable = true)
 |-- c: string (nullable = true)

1. pyspark 사용을 위해선 먼저 SparkSession을 initialize하는 것에서 시작합니다.

 

2. pandas dataframe을 생성합니다.

 

3. spark dataframe을 생성하기 위해서는 createDataFrame method를 사용합니다.

1번에서 생성한 spark class의 createDataFrame method를 이용하여 pandas dataframe으로 spark dataframe을 생성해줍시다.

 

4. show method는 spark dataframe의 모든 내용을 보여줍니다.

 

5. show method에 숫자를 argument로 제시하면 제시된 숫자만큼의 행만 보여줍니다.

show(2)는 가장 위에 있는 2개 행의 내용을 보여줍니다.

 

6. Schema라는 것의 의미는 spark dataframe의 column이라고 생각하면 됩니다.

printSchema method는 spark의 각 컬럼들과 컬럼별 정보를 보여줍니다.

 

 

 

 

 

 

 

 

 

from pyspark.sql import SparkSession
from pyspark.sql import Row

spark = SparkSession.builder.getOrCreate()

df_spark = spark.createDataFrame([
    Row(a=1, b=10.0, c='apple'),
    Row(a=2, b=3.5, c='banana'),
    Row(a=3, b=7.315, c='tomato'),
])

df_spark.show()
df_spark.show(2)
df_spark.printSchema()



-- Result
+---+------+-------+
|  a|     b|      c|
+---+------+-------+
|  1|  10.0|  apple|
|  2|   3.5| banana|
|  3| 7.315| tomato|
+---+------+-------+

+---+------+-------+
|  a|     b|      c|
+---+------+-------+
|  1|  10.0|  apple|
|  2|   3.5| banana|
+---+------+-------+

root
 |-- a: long (nullable = true)
 |-- b: double (nullable = true)
 |-- c: string (nullable = true)

또한 위처럼 pyspark.sql.Row를 이용하여 spark dataframe을 생성할 수도 있습니다.

 

 

 

 

 

 

 

 

그러면 반대로 spark dataframe을 pandas dataframe으로 변환하려면 어떻게해야할까요?

to_pandas라는 method가 있습니다.

from pyspark.sql import SparkSession
from pyspark.sql import Row

spark = SparkSession.builder.getOrCreate()

df_spark = spark.createDataFrame([ # 1
    Row(a=1, b=10.0, c='apple'),
    Row(a=2, b=3.5, c='banana'),
    Row(a=3, b=7.315, c='tomato'),
])

df_pandas = df_spark.toPandas()
print(df_pandas)


-- Result
   a       b       c
0  1  10.000   apple
1  2   3.500  banana
2  3   7.315  tomato

위처럼 toPandas() method를 이용하여 spark dataframe을 pandas dataframe으로 변경할 수 있는 것을 알 수 있습니다.

 

 

 

 

 

 

 

728x90
반응형
Comments