让我们假设数据帧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.
我正在处理一个数据框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解决。
请评论您的解决方案/想法。
亲切的问候。
我通过一个例子来解释我的问题:
让我们假设我们有一个如下的数据框:
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) 我有一个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)
我想根据指定将每个转换price为EUR并放入列price_eur中date。
+-----+--------+----------+---------+
|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.
pyspark ×4
dataframe ×2
apache-spark ×1
arrays ×1
counting ×1
currency ×1
list ×1
sql-order-by ×1
window ×1