Pyspark: как создать флаг в первый раз, когда видна переменная - PullRequest
0 голосов
/ 12 июня 2018

У меня есть набор переменных, которые это отметка времени и сеанс.Как бы я сделал индикатор нового сеанса, который равен 1 для первого сеанса и 0 для каждого экземпляра этого сеанса после этого.Например ...

from pyspark.sql import functions as F

df = sqlContext.createDataFrame([
        ("a", "44", "2018-01-08 09:01:01.085193"),
        ("a", "44", "2018-01-08 09:01:01.086280"),
        ("a", "44", "2018-01-08 09:01:01.087681"),
        ("a", "95", "2018-01-15 12:01:01.544710"),
        ("a", "95", "2018-01-15 13:01:01.545991"),
], ["person_id", "session_id", "timestamp"])

df = df.withColumn('unix_ts',F.unix_timestamp(df.timestamp, 'yyyy-MM-dd HH:mm:ss'))
df = df.withColumn("DayOfWeek",F.date_format(df.timestamp, 'EEEE'))
df.show()

Выход

+---------+----------+--------------------+----------+---------+
|person_id|session_id|           timestamp|   unix_ts|DayOfWeek|
+---------+----------+--------------------+----------+---------+
|        a|        44|2018-01-08 09:01:...|1515423661|   Monday|
|        a|        44|2018-01-08 09:01:...|1515423661|   Monday|
|        a|        44|2018-01-08 09:01:...|1515423661|   Monday|
|        a|        95|2018-01-15 12:01:...|1516039261|   Monday|
|        a|        95|2018-01-15 13:01:...|1516042861|   Monday|
+---------+----------+--------------------+----------+---------+

Я хочу добавить столбец с таким выводом:

+---------+----------+--------------------+----------+---------+----------+
|person_id|session_id|           timestamp|   unix_ts|DayOfWeek| FirstInd |   
+---------+----------+--------------------+----------+---------+----------+
|        a|        44|2018-01-08 09:01:...|1515423661|   Monday|     1    |
|        a|        44|2018-01-08 09:01:...|1515423661|   Monday|     0    |
|        a|        44|2018-01-08 09:01:...|1515423661|   Monday|     0    |
|        a|        95|2018-01-15 12:01:...|1516039261|   Monday|     1    |
|        a|        95|2018-01-15 13:01:...|1516042861|   Monday|     0    |
+---------+----------+--------------------+----------+---------+----------+

1 Ответ

0 голосов
/ 17 июня 2018

У меня работает следующее.Хотя технически это не флаг, вы точно знаете, какая строка имеет номер строки 1. df.withColumn ("rowNum", F.row_number (). Over (Window.partitionBy ('person_id', 'session_id').orderBy ("unix_ts")))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...