Создание нового столбца на основе условий if и else с использованием pyspark - PullRequest
0 голосов
/ 23 мая 2019

У меня есть 2 искровых фрейма данных, и я хочу добавить новый столбец с именем "seg" в фрейм данных df2 на основе следующего условия

  • , если значение df2.colx присутствует в df1.colx.

Я попробовал приведенную ниже операцию в pyspark, но это исключение.

cc002 = df2.withColumn('seg',F.when(df2.colx == df1.colx,"True").otherwise("FALSE"))
  • df1:
id  colx  coly
1   678   56789
2   900   67890
3   789   67854
  • df2
Name   colx
seema  900
yash   678
deep   800
harsh  900
  • Мой ожидаемый результат -
Name  colx   seg
seema 900    True
harsh 900    True
yash  678    True
deep  800    False

Пожалуйста, помогите мне исправить данный код pyspark или предложить лучший способ сделать это.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы можете присоединиться к colx и заполнить нулевые значения с помощью False:

result = (df2.join(df1.select(df1['colx'], F.lit(True).alias('seg')), 
                   on='colx', 
                   how='left')
             .fillna(False, subset='seg'))

result.show()

Выход:

+----+-----+-----+
|colx| Name|  seg|
+----+-----+-----+
| 900|seema| true|
| 900|harsh| true|
| 800| deep|false|
| 678| yash| true|
+----+-----+-----+
1 голос
/ 23 мая 2019

Если я правильно понимаю ваш вопрос, что вы хотите сделать, это

res = df2.join(
    df1,
    on="colx",
    how = "left"
).select(
    "Name",
    "colx"
).withColumn(
    "seg",
    F.when(F.col(colx).isNull(),F.lit(True)).otherwise(F.lit(False))
)

дайте мне знать, если это то решение, которое вам нужно.

мой плохой, я действительно написал неправильный код в спешке ниже исправленный

import pyspark.sql.functions as F

df1 = sqlContext.createDataFrame([[1,678,56789],[2,900,67890],[3,789,67854]],['id', 'colx', 'coly'])

df2 = sqlContext.createDataFrame([["seema",900],["yash",678],["deep",800],["harsh",900]],['Name', 'colx'])

res = df2.join(
    df1.withColumn(
        "check",
        F.lit(1)
    ),
    on="colx",
    how = "left"
).withColumn(
    "seg",
    F.when(F.col("check").isNotNull(),F.lit(True)).otherwise(F.lit(False))
).select(
    "Name",
    "colx",
    "seg"
)

res.show()

+-----+----+-----+
| Name|colx|  seg|
+-----+----+-----+
| yash| 678| true|
|seema| 900| true|
|harsh| 900| true|
| deep| 800|false|
+-----+----+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...