根据PySpark中的另一列填充不同的列

Question_bank

我在PySpark中有一个像下面这样的数据框。我想选择serial_numdevicetypedevice_modeldistinct of timestamp for each serial_num从下面的数据帧:

+-------------+-----------------+---------------+------------------------+
| serial_num  |   devicetype    | device_model  |        timestamp       |
+-------------+-----------------+---------------+------------------------+
| 58172A0396  |                 |               | 2003-01-02 17:37:15.0  |
| 58172A0396  |                 |               | 2003-01-02 17:37:15.0  |
| 46C5Y00693  | Mac Pro         | Mac PC        | 2018-01-03 17:17:23.0  |
| 1737K7008F  | Windows PC      | Windows PC    | 2018-01-05 11:12:31.0  |
| 1737K7008F  | Network Device  | Unknown       | 2018-01-05 11:12:31.0  |
| 1737K7008F  | Network Device  | Unknown       | 2018-01-05 11:12:31.0  |
| 1737K7008F  | Network Device  |               | 2018-01-06 03:12:52.0  |
| 1737K7008F  | Windows PC      | Windows PC    | 2018-01-06 03:12:52.0  |
| 1737K7008F  | Network Device  | Unknown       | 2018-01-06 03:12:52.0  |
| 1665NF01F3  | Network Device  | Unknown       | 2018-01-07 03:42:34.0  |
+----------------+-----------------+---------------+---------------------+

我已经尝试过如下

df1 = df.select('serial_num', 'devicetype', 'device_model', f.count('distinct timestamp').over(Window.partitionBy('serial_num')).alias('val')

我想要的结果是:

+-------------+-----------------+---------------+-----+
| serial_num  |   devicetype    | device_model  |count|
+-------------+-----------------+---------------+-----+
| 58172A0396  |                 |               |  1  |
| 58172A0396  |                 |               |  1  |
| 46C5Y00693  | Mac Pro         | Mac PC        |  1  |
| 1737K7008F  | Windows PC      | Windows PC    |  2  |
| 1737K7008F  | Network Device  | Unknown       |  2  |
| 1737K7008F  | Network Device  | Unknown       |  2  |
| 1737K7008F  | Network Device  |               |  2  |
| 1737K7008F  | Windows PC      | Windows PC    |  2  |
| 1737K7008F  | Network Device  | Unknown       |  2  |
| 1665NF01F3  | Network Device  | Unknown       |  1  |
+-------------+-----------------+---------------+-----+

我该如何实现?

ido堂

不幸的countDistinct是,Windows不支持。然而,组合collect_setsize可用于acheive相同的最终结果。Spark 2.0+版本支持此功能,请按以下方式使用:

import pyspark.sql.funcions as F

w = Window.partitionBy('serial_num')
df1 = df.select(..., F.size(F.collect_set('timestamp').over(w)).alias('count'))

对于较旧的Spark版本,您可以使用groupbycountDistinct创建一个包含所有计数的新数据框。然后join将此数据帧与原始数据帧一起。

df2 = df.groupby('serial_num').agg(F.countDistinct('timestamp').alias('count'))
df1 = df.join(df2, 'serial_num')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用dplyr根据另一列的不同值在新列中填充不同的值?

根据SQL中的另一列填充列

如何根据另一列中的值填充列?

如何根据另一列中的值填充另一列中的值?

根据另一列中的条件填充熊猫

根据另一列填充 vsfgird 的一列

PowerBI:根据另一列中的不同值计算一列中的不同值

如何根据同一表中的另一列数据填充一列?

根据另一列中的数字输入,用文本填充一列

Excel公式根据另一列中的值填充一列

根据另一列的汇总在一列中填充空值

根据另一列中的值填充一列-Pandas

如何根据 Excel 中另一列的值填充一列?

如何根据另一列的不同值从一列中获取值?

R - 根据另一列中的另一行向下填充一列的行

根据另一列填充熊猫列

根据另一列的值填充CSV列

根据第三列中的相邻单词,用另一列中的文本(无空格)填充一列

根据熊猫数据框中另一列的最后一个值填充列

根据另一列更新pyspark数据框列

如何根据另一列中的值填充组中的 np.nan 列?

如何根据熊猫中另一列中的空值填充列

如何根据另一列中的间隔填充熊猫中其他列的缺失值?

根据pyspark中另一列的值拆分一个列

根据另一列中的条件填充多个数据框列

根据 R 中另一列的条件,用相同的值填充整个新列

插入DataFrame列并根据PySpark或Pandas中的另一列进行排序

Pyspark 根据另一列的模式替换列中的字符串

pyspark:根据另一列中包含的字符串创建列