>>> 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
и я хочу удалить тот. Как я могу сделать?
Рассмотрите 2 кадра данных:
>>> aDF.show()
+---+----+
| id|datA|
+---+----+
| 1| a1|
| 2| a2|
| 3| a3|
+---+----+
и
>>> bDF.show()
+---+----+
| id|datB|
+---+----+
| 2| b2|
| 3| b3|
| 4| b4|
+---+----+
Для выполнения, что Вы ищете существует 2 пути:
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 в этом.
>>> 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|
+----+----+----+
Можно удалить столбец как это:
df.drop("column Name).columns
В Вашем случае:
df.drop("id").columns
, Если Вы хотите отбросить больше чем один столбец, можно сделать:
dfWithLongColName.drop("ORIGIN_COUNTRY_NAME", "DEST_COUNTRY_NAME")