首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确连接星火中的两个数据

如何正确连接星火中的两个数据
EN

Stack Overflow用户
提问于 2019-12-05 15:52:05
回答 1查看 51关注 0票数 1

鉴于这些数据集:

productsMetadataDF

代码语言:javascript
复制
{'asin': '0006428320', 'title': 'Six Sonatas For Two Flutes Or Violins, Volume 2 (#4-6)', 'price': 17.95, 'imUrl': 'http://ecx.images-amazon.com/images/I/41EpRmh8MEL._SY300_.jpg', 'salesRank': {'Musical Instruments': 207315}, 'categories': [['Musical Instruments', 'Instrument Accessories', 'General Accessories', 'Sheet Music Folders']]}

productsRatingsDF

代码语言:javascript
复制
{"reviewerID": "AORCXT2CLTQFR", "asin": "0006428320", "reviewerName": "Justo Roteta", "helpful": [0, 0], "overall": 4.0, "summary": "Not a classic but still a good album from Yellowman.", "unixReviewTime": 1383436800, "reviewTime": "11 3, 2013"}

这一职能:

代码语言:javascript
复制
def findProductFeatures(productsRatingsDF : DataFrame, productsMetadataDF : DataFrame) : DataFrame = {
    productsRatingsDF
      .withColumn("averageRating", avg("overall"))
      .join(productsMetadataDF,"asin")
      .select($"asin", $"categories", $"price", $"averageRating")
  }

基于asin,这是连接这两个数据集的正确方法吗?

以下是我遇到的错误:

代码语言:javascript
复制
Exception in thread "main" org.apache.spark.sql.AnalysisException: grouping expressions sequence is empty, and '`asin`' is not an aggregate function. Wrap '(avg(`overall`) AS `averageRating`)' in windowing function(s) or wrap '`asin`' in first() (or first_value) if you don't care which value you get.;;
Aggregate [asin#6, helpful#7, overall#8, reviewText#9, reviewTime#10, reviewerID#11, reviewerName#12, summary#13, unixReviewTime#14L, avg(overall#8) AS averageRating#99]
+- Relation[asin#6,helpful#7,overall#8,reviewText#9,reviewTime#10,reviewerID#11,reviewerName#12,summary#13,unixReviewTime#14L] json

我明白错误正确吗,我加入的方式有错误吗?我试着改变了.withColumn和.join的顺序,但是没有成功。当我尝试根据asin数字将avg(“全局”)输入到列中时,似乎也出现了错误。

最终的结果应该是,我得到了一个由4列"asin“、”类别“、"price”和"averageRating“组成的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-05 16:12:02

问题似乎是:

.withColumn("averageRating", avg("overall"))

在加入前进行适当的聚合:

代码语言:javascript
复制
df
.groupBy("asin") // your columns
.agg(avg("overall").as("averageRating"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59198796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档