HOWTO · Pandas

Spark 목록을 Pandas Dataframe으로 변환

PySpark 행 목록을 Pandas 데이터 프레임으로 변환합니다. PySpark DataFrame의 행 개체는 단일 행으로 정의됩니다. 결과적으로 데이터 프레임은 Python에서 행 개체 목록으로 나타낼 수 있습니다. 스파크 목록을 pandas 데이터 프레임으로 변환하기 위해 다른 기능을 사용합니다.

이 문서에서는 Spark 행 목록을 Pandas 데이터 프레임으로 변환합니다.

topandas() 메서드를 사용하여 Spark 목록을 Pandas Dataframe으로 변환

createDataframe() 구문:

current_session.createDataFrame(data, schema=None, samplingRatio=None, verifySchema=True)

매개변수:

  • 데이터: 이 매개변수에는 SQL/MySQL 형식의 데이터 또는 데이터 세트가 포함됩니다.
  • 스키마: 데이터 프레임의 열 이름을 포함합니다.
  • sampling Ratio(float): 행의 비율입니다.
  • verify Schema(bool): 스키마의 데이터 유형을 확인하기 위한 부울 유형입니다.

위의 매개 변수는 Spark 데이터 프레임 개체를 반환합니다. 위 방법의 예는 다음과 같습니다.

먼저 이 함수를 사용하여 행 목록 데이터를 전달하고 스파크 데이터 프레임을 만듭니다. 그런 다음 PySpark 및 기타 관련 모듈을 가져옵니다.

암호:

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

row_pandas_session = SparkSession.builder.appName("row_pandas_session").getOrCreate()
row_object_list = [
    Row(Topic="Machine Learning", Difficulty=10),
    Row(Topic="Artifical Intligence", Difficulty=5),
    Row(Topic="Deep learning", Difficulty=6),
    Row(Topic="Python Ptogramming", Difficulty=7),
]

스파크 데이터 프레임을 생성하려면 createDataframe() 함수를 사용하십시오.

df = row_pandas_session.createDataFrame(row_object_list)

show() 함수를 사용하여 생성된 스파크 데이터 프레임을 표시합니다.

df.show()

출력:

+--------------------+----------+
|               Topic|Difficulty|
+--------------------+----------+
|    Machine Learning|        10|
|Artifical Intligence|         5|
|       Deep learning|         6|
|  Python Ptogramming|         7|
+--------------------+----------+

마지막으로 topandas() 함수를 사용하여 스파크 데이터 프레임을 Pandas 데이터 프레임으로 변환합니다. 그런 다음 Pandas 데이터 프레임을 인쇄합니다.

pandas_df = df.toPandas()
pandas_df

출력:

                  Topic  Difficulty
0      Machine Learning          10
1  Artifical Intligence           5
2         Deep learning           6
3    Python Ptogramming           7

전체 코드:

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

row_pandas_session = SparkSession.builder.appName("row_pandas_session").getOrCreate()
row_object_list = [
    Row(Topic="Machine Learning", Difficulty=10),
    Row(Topic="Artifical Intligence", Difficulty=5),
    Row(Topic="Deep learning", Difficulty=6),
    Row(Topic="Python Ptogramming", Difficulty=7),
]
df = row_pandas_session.createDataFrame(row_object_list)
df.show()
pandas_df = df.toPandas()
pandas_df

parallelize() 함수를 사용하여 Spark 목록을 Python Pandas Dataframe으로 변환

RDD를 생성하기 위해 parallelize() 기능을 사용합니다. 병렬화는 미리 정의된 컬렉션의 요소를 병렬 작업을 수행할 수 있는 분산 데이터 세트에 복사하는 것을 말합니다.

통사론:

sc.parallelize(data,numSlices)

어디:

  • sc: Spark 컨텍스트 개체

매개변수:

  • 데이터: 이것은 RDD를 위해 만들어진 데이터 또는 데이터 세트입니다.
  • numSlices: 파티션 수를 지정합니다. 선택적 매개변수입니다.

아래 코드는 이전 섹션과 동일합니다.

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

row_pandas_session = SparkSession.builder.appName("row_pandas_session").getOrCreate()
row_object_list = [
    Row(Topic="Machine Learning", Difficulty=10),
    Row(Topic="Artifical Intligence", Difficulty=5),
    Row(Topic="Deep learning", Difficulty=6),
    Row(Topic="Python Ptogramming", Difficulty=7),
]

이제 RDD를 사용하여 데이터 프레임을 만듭니다.

rdd = row_pandas_session.sparkContext.parallelize(row_object_list)
rdd

출력:

ParallelCollectionRDD[11] at readRDDFromFile at PythonRDD.scala:274

이제 아래와 같이 데이터 프레임을 생성합니다.

df = row_pandas_session.createDataFrame(rdd)
df.show()

출력:

+--------------------+----------+
|               Topic|Difficulty|
+--------------------+----------+
|    Machine Learning|        10|
|Artifical Intligence|         5|
|       Deep learning|         6|
|  Python Ptogramming|         7|
+--------------------+----------+

마지막으로 Pandas 데이터 프레임으로 변환합니다.

df2 = df.toPandas()
print(df2)

출력:

                  Topic  Difficulty
0      Machine Learning          10
1  Artifical Intligence           5
2         Deep learning           6
3    Python Ptogramming           7

결론

이 기사에서는 두 가지 방법을 사용했습니다. 먼저 createDataframe() 함수를 사용한 다음 topandas() 함수를 사용하여 Spark 목록을 Pandas 데이터 프레임으로 변환합니다.

우리가 사용한 두 번째 방법은 parallelize() 기능입니다. 이 방법에서는 먼저 이전과 동일한 기능을 사용하여 Spark 데이터 프레임을 만든 다음 RDD를 사용하여 병렬화하고 Spark 데이터 프레임을 만듭니다.

Spark 데이터 프레임은 topandas() 함수를 사용하여 Pandas 데이터 프레임으로 변환됩니다.