python - 划分不同数据帧的两列

标签 python apache-spark pyspark apache-spark-sql

我正在使用 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/

相关文章:

java - 什么相当于python相当于使用Class.getResource()

python - 在 Pygame、Python 3 中设置固定 FPS

scala - 如何将未编译的 Spark Scala/spark-shell 代码作为 Dataproc 作业运行?

python - pyspark 为自定义模块返回一个名为 no module 的错误

pandas - 如何修复 "ImportError: Pandas >= 0.19.2 must be installed; however, it was not found"?

python - 我可以在 pythonw 中获取 "print"语句的输出吗?

apache-spark - pyspark JOB 失败并显示 "No space left on device"

java - 线程中的异常 "main"java.lang.NoSuchMethodError : scala. Predef$.longArrayOps([J)[J

pyspark - 在另一个 Spark sql 查询中使用 PySpark Dataframe 列

python - 使用 SQLAlchemy 渲染 INSERT INTO SELECT RETURNING