Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyspark 如何获取列表';数据帧spark中一列的长度?_Pyspark - Fatal编程技术网

Pyspark 如何获取列表';数据帧spark中一列的长度?

Pyspark 如何获取列表';数据帧spark中一列的长度?,pyspark,Pyspark,我有一个df,其“产品”列如下所示: +----------+---------+--------------------+ |member_srl|click_day| products| +----------+---------+--------------------+ | 12| 20161223| [2407, 5400021771]| | 12| 20161226| [7320, 2407]| | 12

我有一个df,其“产品”列如下所示:

+----------+---------+--------------------+
|member_srl|click_day|            products|
+----------+---------+--------------------+
|        12| 20161223|  [2407, 5400021771]|
|        12| 20161226|        [7320, 2407]|
|        12| 20170104|              [2407]|
|        12| 20170106|              [2407]|
|        27| 20170104|        [2405, 2407]|
|        28| 20161212|              [2407]|
|        28| 20161213|      [2407, 100093]|
|        28| 20161215|           [1956119]|
|        28| 20161219|      [2407, 100093]|
|        28| 20161229|           [7905970]|
|       124| 20161011|        [5400021771]|
|      6963| 20160101|         [103825645]|
|      6963| 20160104|[3000014912, 6626...|
|      6963| 20160111|[99643224, 106032...|
如何添加一个新列
product\u cnt
,该列是
products
列表的长度?在给定产品长度的条件下,如何过滤df以获得指定的行?
谢谢。第一个问题:

如何添加一个新的列product_cnt,它是产品列表的长度

你可以找到一个类似的例子

第二个问题

在给定产品长度的条件下,如何过滤df以获得指定的行

您可以使用过滤器功能


Pyspark有一个内置函数,可以精确地实现所需的
size
。 要将其添加为列,只需在select语句中调用它即可

from pyspark.sql.functions import size

countdf = df.select('*',size('products').alias('product_cnt'))
过滤的工作原理与@titiro89所描述的完全相同。此外,您还可以使用过滤器中的
size
功能。这将允许您通过以下方式绕过添加额外列(如果您希望这样做)

filterdf = df.filter(size('products')==given_products_length)
>>> givenLength = 2
>>> df3 = df2.filter(df2.product_cnt==givenLength)
>>> df3.show()
+----------+---------+------------------+-----------+
|member_srl|click_day|          products|product_cnt|
+----------+---------+------------------+-----------+
|        12| 20161223|[2407, 5400021771]|          2|
+----------+---------+------------------+-----------+
from pyspark.sql.functions import size

countdf = df.select('*',size('products').alias('product_cnt'))
filterdf = df.filter(size('products')==given_products_length)