我正在使用 Spark 对用户日志文件进行探索性数据分析。我正在做的一项分析是每台主机每天的平均请求。因此,为了计算平均值,我需要将 DataFrame 的总请求列除以 DataFrame 的唯一请求列数。
total_req_per_day_df = logs_df.select('host',dayofmonth('time').alias('day')).groupby('day').count()
avg_daily_req_per_host_df = total_req_per_day_df.select("day",(total_req_per_day_df["count"] / daily_hosts_df["count"]).alias("count"))
这是我使用 PySpark 编写的用于确定平均值的内容。这是我得到的错误日志
AnalysisException: u'resolved attribute(s) count#1993L missing from day#3628,count#3629L in operator !Project [day#3628,(cast(count#3629L as double) / cast(count#1993L as double)) AS count#3630];
注意:daily_hosts_df 和 logs_df 缓存在内存中。如何划分两个数据框的计数列?
最佳答案
无法引用另一个表中的列。如果你想合并数据,你必须先使用类似于此的方法join
:
from pyspark.sql.functions import col
(total_req_per_day_df.alias("total")
.join(daily_hosts_df.alias("host"), ["day"])
.select(col("day"), (col("total.count") / col("host.count")).alias("count")))
关于python - 划分不同数据帧的两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38128014/