小编All*_*ati的帖子

Pyspark 数据框:计算数组或列表中的元素

让我们假设数据帧df为:

df.show()
Run Code Online (Sandbox Code Playgroud)

输出:

+------+----------------+
|letter| list_of_numbers|
+------+----------------+
|     A|    [3, 1, 2, 3]|
|     B|    [1, 2, 1, 1]|
+------+----------------+
Run Code Online (Sandbox Code Playgroud)

我想要做的是对countcolumn 中特定元素的编号list_of_numbers。像这样的东西:

+------+----------------+----+
|letter| list_of_numbers|ones|
+------+----------------+----+
|     A|    [3, 1, 2, 3]|   1|
|     B|    [1, 2, 1, 1]|   3|
+------+----------------+----+
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过创建udf并且它完美地工作,但我想知道我是否可以在不定义任何udf.

arrays list counting dataframe pyspark

6
推荐指数
2
解决办法
1万
查看次数

pyspark; 检查元素是否在collect_list中

我正在处理一个数据框df,例如以下数据框:

df.show()
Run Code Online (Sandbox Code Playgroud)

输出:

+----+------+
|keys|values|
+----+------+
|  aa| apple|
|  bb|orange|
|  bb|  desk|
|  bb|orange|
|  bb|  desk|
|  aa|   pen|
|  bb|pencil|
|  aa| chair|
+----+------+
Run Code Online (Sandbox Code Playgroud)

我使用collect_set聚合来获得一组消除了重复元素的对象(或collect_list获得对象列表)。

df_new = df.groupby('keys').agg(collect_set(df.values).alias('collectedSet_values'))
Run Code Online (Sandbox Code Playgroud)

结果数据帧如下:

df_new.show()
Run Code Online (Sandbox Code Playgroud)

输出:

+----+----------------------+
|keys|collectedSet_values   |
+----+----------------------+
|bb  |[orange, pencil, desk]|
|aa  |[apple, pen, chair]   |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)

我正在努力寻找一种方法来查看结果集中的对象(在列中collectedSet_values)中是否存在特定的关键字(例如“ chair” )。我不想udf解决。

请评论您的解决方案/想法。

亲切的问候。

apache-spark apache-spark-sql pyspark

5
推荐指数
1
解决办法
2875
查看次数

orderBy 如何影响 Pyspark 数据框中的 Window.partitionBy?

我通过一个例子来解释我的问题:
让我们假设我们有一个如下的数据框:

original_df = sc.createDataFrame([('x', 10,), ('x', 15,), ('x', 10,), ('x', 25,), ('y', 20,), ('y', 10,), ('y', 20,)], ["key", "price"] )
original_df.show()
Run Code Online (Sandbox Code Playgroud)

输出:

+---+-----+
|key|price|
+---+-----+
|  x|   10|
|  x|   15|
|  x|   10|
|  x|   25|
|  y|   20|
|  y|   10|
|  y|   20|
+---+-----+
Run Code Online (Sandbox Code Playgroud)

并假设我想获取prices每个key使用的列表window

w = Window.partitionBy('key')
original_df.withColumn('price_list', F.collect_list('price').over(w)).show()
Run Code Online (Sandbox Code Playgroud)

输出:

+---+-----+----------------+
|key|price|      price_list|
+---+-----+----------------+
|  x|   10|[10, 15, 10, 25]|
|  x|   15|[10, 15, 10, 25]|
|  x|   10|[10, …
Run Code Online (Sandbox Code Playgroud)

window sql-order-by pyspark

5
推荐指数
1
解决办法
4611
查看次数

Pyspark 货币转换器

我有一个df这样的数据框:

df.show()
Run Code Online (Sandbox Code Playgroud)

输出:

+-----+--------+----------+
|price|currency|      date|
+-----+--------+----------+
|   10|     USD|2018-07-03|
|   10|     USD|2018-03-19|
|    8|     SEK|2018-07-10|
|   10|     NOK|2018-05-25|
|    5|     EUR|2018-05-13|
+-----+--------+----------+
Run Code Online (Sandbox Code Playgroud)

我想根据指定将每个转换priceEUR并放入列price_eurdate

+-----+--------+----------+---------+
|price|currency|      date|price_eur|
+-----+--------+----------+---------+
|   10|     USD|2018-07-03|     8.57|
|   10|     USD|2018-03-18|     8.12|
|    8|     SEK|2018-07-10|     0.78|
|   10|     NOK|2018-05-25|     1.05|
|    5|     EUR|2018-05-13|        5|
+-----+--------+----------+---------+
Run Code Online (Sandbox Code Playgroud)

有谁知道这样做的有效方法?

虽然有pandas数据帧,我可以简单地使用CurrencyConverter python API,但我找不到在pyspark.

currency dataframe pyspark

4
推荐指数
1
解决办法
1708
查看次数