【发布时间】:2019-04-18 19:58:47
【问题描述】:
我有以下数据:
id type price
1 us 1.99
1 ca 2.99
2 ca 1.99
3 au 2.99
3 us 3.99
3 ca 2.99
基本上,我希望每个id 只获得一条记录,如果不止一条,那么我想保留一条带类型的记录,us 而不是其他记录。
期望的输出:
id type price
1 us 1.99
2 ca 1.99
3 us 3.99
如何使用PySpark 或SparkSQL 对Spark DataFrame 或表格执行此操作?
【问题讨论】:
-
你为什么不试试这个?
cols = ['id', 'type', 'price'] vals = [ (1, 'us', 1.99), (1, 'ca', 2.99), (2, 'ca', 1.99), (3, 'au', 2.99), (3, 'us', 2.99), (3, 'us', 3.99), (3 ,'ca', 2.99)] df = spark.createDataFrame(vals, cols) d = df.groupBy('id').agg(first('type').alias('type'), first('price').alias('price')).orderBy('id') d.show() -
谢谢,但它无法识别“第一”。甚至尝试过。 from pyspark.sql 导入函数为 F F.first。还是一样的。上面的查询如何首先产生“美国”?
-
你能粘贴你目前尝试过的代码吗?
-
这与您在上面给我的代码完全相同,我在 databrick note 中运行。我明天会发布它。但实际上是一样的。我想我可能不得不走这条路。从 df 获取所有“美国”并将其保存到 df1。从 df1 中获取不存在 id 的 df 的所有“CA”并将其保存到 df2。然后合并df1和df2。假设只有 'us' 和 'ca' 类型会起作用吗?
标签: apache-spark dataframe pyspark pyspark-sql databricks