>>> a
DataFrame[id: bigint, julian_date: string, user_id: bigint]
>>> b
DataFrame[id: bigint, quan_created_money: decimal(10,0), quan_created_cnt: bigint]
>>> a.join(b, a.id==b.id, 'outer')
DataFrame[id: bigint, julian_date: string, user_id: bigint, id: bigint, quan_created_money: decimal(10,0), quan_created_cnt: bigint]
두 개가 있는데 id: bigint
하나를 삭제하고 싶습니다. 어떻게 할 수 있습니까?
답변
Spark 문서를 읽고 더 쉬운 해결책을 찾았습니다.
Spark 버전 1.4부터 drop(col)
데이터 프레임의 pyspark에서 사용할 수 있는 기능 이 있습니다.
두 가지 방법으로 사용할 수 있습니다.
df.drop('age').collect()
df.drop(df.age).collect()
답변
@Patrick의 답변에 추가하면 다음을 사용하여 여러 열을 삭제할 수 있습니다.
columns_to_drop = ['id', 'id_copy']
df = df.drop(*columns_to_drop)
답변
이 작업을 수행하는 쉬운 방법은 “사용자에게있다 select
“당신은 모든 목록을 얻을 수 있습니다 실현 columns
를 들어 dataframe
, df
와df.columns
drop_list = ['a column', 'another column', ...]
df.select([column for column in df.columns if column not in drop_list])
답변
다음과 같이 유지하려는 열의 이름을 명시 적으로 지정할 수 있습니다.
keep = [a.id, a.julian_date, a.user_id, b.quan_created_money, b.quan_created_cnt]
또는보다 일반적인 접근 방식에서는 목록 이해를 통해 특정 열을 제외한 모든 열을 포함합니다. 예를 들어 다음과 같습니다 (의 id
열 제외 b
).
keep = [a[c] for c in a.columns] + [b[c] for c in b.columns if c != 'id']
마지막으로 조인 결과를 선택합니다.
d = a.join(b, a.id==b.id, 'outer').select(*keep)
답변
두 가지 방법으로 사용할 수 있습니다.
1 : 필요한 열만 유지합니다.
drop_column_list = ["drop_column"]
df = df.select([column for column in df.columns if column not in drop_column_list])
2 : 이것이 더 우아한 방법입니다.
df = df.drop("col_name")
collect () 버전을 피해야합니다. 마스터에게 완전한 데이터 세트를 보낼 것이기 때문에 엄청난 컴퓨팅 노력이 필요합니다!
답변
주제에서 약간 벗어난 것일 수도 있지만 여기에 Scala를 사용하는 솔루션이 있습니다. 확인 Array
귀하의에서 열 이름을 oldDataFrame
당신이 드롭하려는 열을 삭제합니다 ("colExclude")
. 그런 다음 통과 Array[Column]
로 select
하고 압축을 풉니 다.
val columnsToKeep: Array[Column] = oldDataFrame.columns.diff(Array("colExclude"))
.map(x => oldDataFrame.col(x))
val newDataFrame: DataFrame = oldDataFrame.select(columnsToKeep: _*)
답변
2 개의 dataFrame을 고려하십시오.
>>> aDF.show()
+---+----+
| id|datA|
+---+----+
| 1| a1|
| 2| a2|
| 3| a3|
+---+----+
과
>>> bDF.show()
+---+----+
| id|datB|
+---+----+
| 2| b2|
| 3| b3|
| 4| b4|
+---+----+
원하는 것을 달성하기위한 두 가지 방법이 있습니다.
1. 결합 조건이 다릅니다. aDF.id == bDF.id 대신
aDF.join(bDF, aDF.id == bDF.id, "outer")
이것을 쓰십시오 :
aDF.join(bDF, "id", "outer").show()
+---+----+----+
| id|datA|datB|
+---+----+----+
| 1| a1|null|
| 3| a3| b3|
| 2| a2| b2|
| 4|null| b4|
+---+----+----+
이렇게하면 추가 드롭 프로세스가 자동으로 제거됩니다.
2. 별칭 사용 : B 특정 ID와 관련된 데이터를 잃게됩니다.
>>> from pyspark.sql.functions import col
>>> aDF.alias("a").join(bDF.alias("b"), aDF.id == bDF.id, "outer").drop(col("b.id")).show()
+----+----+----+
| id|datA|datB|
+----+----+----+
| 1| a1|null|
| 3| a3| b3|
| 2| a2| b2|
|null|null| b4|
+----+----+----+