스택큐힙리스트

PySpark에서 데이터프레임의 열 이름을 변경하는 방법은 무엇인가요? 본문

카테고리 없음

PySpark에서 데이터프레임의 열 이름을 변경하는 방법은 무엇인가요?

스택큐힙리스트 2023. 12. 2. 23:43
반응형

나는 판다 스의 배경에서 왔으며 CSV 파일에서 데이터를 데이터프레임으로 읽어서 간단한 명령인 다음과 같이 열 이름을 유용한 이름으로 변경하는 것에 익숙합니다:


df.columns = new_column_name_list

그러나 sqlContext를 사용하여 생성된 PySpark 데이터프레임에서는 동일한 방법이 작동하지 않습니다.
이를 쉽게 수행하기 위한 유일한 해결책은 다음과 같습니다:


df = sqlContext.read.format(com.databricks.spark.csv).options(header='false', inferschema='true', delimiter='\t').load(data.txt)
oldSchema = df.schema
for i,k in enumerate(oldSchema.fields):
k.name = new_column_name_list[i]
df = sqlContext.read.format(com.databricks.spark.csv).options(header='false', delimiter='\t').load(data.txt, schema=oldSchema)

이는 기본적으로 변수를 두 번 정의하고 먼저 스키마를 추론한 다음 열 이름을 변경한 다음 업데이트된 스키마로 데이터프레임을 다시로드하는 것입니다.

판다스에서 하는 것처럼 이를 더 나은 방법이나 효율적으로 수행하는 방법이 있을까요?


제 스파크 버전은 1.5.0입니다.

답변 1

그것을 하는 방법은 다양합니다:


  • 옵션 1. selectExpr를 사용합니다.


     data = sqlContext.createDataFrame([(Alberto, 2), (Dakota, 2)], 
    [이름, 나이])
    data.show()
    data.printSchema()
    # 출력
    #+-------+---+
    #| 이름|나이|
    #+-------+---+
    #|Alberto| 2|
    #| Dakota| 2|
    #+-------+---+
    #root
    # |-- 이름: string (nullable = true)
    # |-- 나이: long (nullable = true)
    df = data.selectExpr(이름 as name, 나이 as age)
    df.show()
    df.printSchema()
    # 출력
    #+-------+---+
    #| name|age|
    #+-------+---+
    #|Alberto| 2|
    #| Dakota| 2|
    #+-------+---+
    #root
    # |-- name: string (nullable = true)
    # |-- age: long (nullable = true)


  • 옵션 2. withColumnRenamed을 사용합니다. 이 메서드는 동일한 컬럼을 덮어씌울 수 있다는 점에 유의하세요. Python3의 경우 xrangerange로 바꿔주어야 합니다.


     from functools import reduce
    oldColumns = data.schema.names
    newColumns = [name, age]
    df = reduce(lambda data, idx: data.withColumnRenamed(oldColumns[idx], newColumns[idx]), range(len(oldColumns)), data)
    df.printSchema()
    df.show()


  • 옵션 3. alias를 사용합니다. Scala에서는 as를 사용할 수도 있습니다.


     from pyspark.sql.functions import col
    data = data.select(col(이름).alias(name), col(나이).alias(age))
    data.show()
    # 출력
    #+-------+---+
    #| name|age|
    #+-------+---+
    #|Alberto| 2|
    #| Dakota| 2|
    #+-------+---+


  • 옵션 4. sqlContext.sql을 사용합니다. 이는 DataFrames을 테이블로 등록하여 SQL 쿼리를 사용할 수 있게 해줍니다.


     sqlContext.registerDataFrameAsTable(data, myTable)
    df2 = sqlContext.sql(SELECT Name AS name, askdaosdka as age from myTable)
    df2.show()
    # 출력
    #+-------+---+
    #| name|age|
    #+-------+---+
    #|Alberto| 2|
    #| Dakota| 2|
    #+-------+---+


답변 2

PySpark을 사용하여 데이터프레임의 열 이름을 변경하는 방법은 무엇일까요? 데이터프레임은 대용량의 데이터를 처리하는 데 유용한 도구이며, 때때로 열 이름을 변경해야할 때도 있습니다. 이에 대해 알아보겠습니다.
PySpark에서는 `withColumnRenamed` 메서드를 사용하여 데이터프레임의 열 이름을 변경할 수 있습니다. 이 메서드는 두 개의 인수를 받습니다. 첫 번째 인수는 원래 열 이름이고, 두 번째 인수는 변경하고자 하는 새로운 열 이름입니다.
예를 들어, 다음과 같은 원본 데이터프레임이 있다고 가정해봅시다.
```python
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName(Column Name Change).getOrCreate()
data = [(Alice, 25, New York),
(Bob, 30, Los Angeles),
(Eve, 35, Chicago)]
df = spark.createDataFrame(data, [name, age, city])
df.show()
```
이제 열 이름 name을 이름, age를 나이, city를 도시로 변경해보겠습니다.
```python
df = df.withColumnRenamed(name, 이름) \\
.withColumnRenamed(age, 나이) \\
.withColumnRenamed(city, 도시)
df.show()
```
변경 후의 데이터프레임은 다음과 같은 열 이름을 가지게 됩니다.
```
+----+---+---------+
|이름|나이| 도시|
+----+---+---------+
|Alice| 25|New York |
|Bob | 30|Los Angeles|
|Eve | 35|Chicago |
+----+---+---------+
```
이와 같이, `withColumnRenamed` 메서드를 사용하여 데이터프레임의 열 이름을 효과적으로 변경할 수 있습니다. 이를 통해 데이터프레임에 포함된 열 이름을 보다 직관적이고 이해하기 쉬운 형태로 변경할 수 있습니다.
PySpark을 사용하여 데이터프레임의 열 이름을 변경하는 방법에 대해 알아보았습니다. 이를 통해 데이터프레임을 더 효율적으로 다룰 수 있으며, 열 이름을 보다 의미 있는 이름으로 변경함으로써 가독성을 향상시킬 수 있습니다. 데이터 처리 작업에 있어서 열 이름은 매우 중요하기 때문에, 열 이름 변경 기능을 잘 활용하는 것이 데이터 분석 및 처리 작업의 성공에 큰 도움이 될 것입니다.

반응형
Comments