Как использовать «выбрать» и «с колонкой» вместе - Pyspark - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть два фрейма данных df1 и df2

Мне нужно объединить два фрейма данных и создать новый, соединение осуществляется с использованием df1.col1 = df2.col1, внутреннее соединение. вместе использовать операторы "select" и "withColumn"?

, например,

df3 = df1.join(df2,df1.col1 = df2.col1,'inner').select(df1.col4,df2.col4).
      withColumn("col2",(df1.col1+df2.col2))
      withColumn("col3",(df1.col1/df2.col2))

Как можно добиться этого отдельно, работает с столбцами.

Dataframe_example

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Возможно, вы хотите изменить порядок ваших операций. Из всех столбцов в кадре данных select фильтрует этот список. Если вы намереваетесь использовать withColumn, убедитесь, что столбцы доступны (выбрано). Как правило, оставляйте операторы select в конце ваших преобразований.

    # make sure to use the keyword` attributes so you don't get confused
    df3 = df1.join(df2, on='col1',how='inner') \
          .withColumn("col2",(df1.col2+df2.col2)) \
          .withColumn("col3",(df2.col3/df1.col2)) \
          .select('col1', 'col2', 'col3', df2.col4)

Чтобы увидеть, что происходит в каждом из преобразований, добавьте оператор .show(), и все это будет намного более понятным шагом. шаг за шагом.

1 голос
/ 04 апреля 2020

Вам необходимо выбрать все необходимые столбцы в .select, и только эти столбцы будут использоваться в .withColumn

Example:

df1=spark.createDataFrame([("a","1","4","t"),("b","2","5","v"),("c","3","6","v")],["col1","col2","col3","col4"])
df2=spark.createDataFrame([("a","1","4","ord2"),("b","2","5","ord1"),("c","3","6","ord3")],["col1","col2","col3","col4"])

df1.join(df2,df1.col1 == df2.col1,'inner').select(df1.col1,df2.col2,df1.col3,df1.col2,df2.col4).withColumn("col3",(df1.col3 / df2.col2).cast("double")).withColumn("col2",(df1.col2 + df2.col2).cast("int")).show()

#+----+----+----+----+----+
#|col1|col2|col3|col2|col4|
#+----+----+----+----+----+
#|   a|   2| 4.0|   2|ord2|
#|   b|   4| 2.5|   4|ord1|
#|   c|   6| 2.0|   6|ord3|
#+----+----+----+----+----+
...