반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 네트워크
- 코딩
- 보안
- 머신러닝
- 알고리즘
- 자료구조
- 자바스크립트
- 컴퓨터과학
- 파이썬
- 웹개발
- 버전관리
- 데이터구조
- 사이버보안
- 데이터과학
- 데이터분석
- 프로그래밍언어
- 데이터베이스
- 인공지능
- 컴퓨터공학
- 소프트웨어공학
- 빅데이터
- 소프트웨어
- 클라우드컴퓨팅
- I'm Sorry
- 딥러닝
- 네트워크보안
- 프로그래밍
- Yes
- 컴퓨터비전
- 2
Archives
- Today
- Total
스택큐힙리스트
PySpark에서 데이터프레임의 열 이름을 변경하는 방법은 무엇인가요? 본문
반응형
나는 판다 스의 배경에서 왔으며 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의 경우
xrange
를range
로 바꿔주어야 합니다.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