我的用法如下。考虑我有一个pyspark数据帧,其格式如下: df.columns: 1. hh:包含一天中的小时(类型为int) 2. userId:一些唯一标识符。
我想要做的是想弄清楚在页面上有异常点击的userId列表。所以我先做一个groupby: DF = df.groupby(" HH""用户id).Count之间()别名(" LoginCounts)。
现在数据框的格式为: 嗯 2. userId 3.LoginCounts:特定用户在特定时刻登录的次数。
我想使用pyspark kde函数,如下所示:
from pyspark.mllib.stat import KernelDensity
kd=KernelDensity()
kd.setSample(df.select("LoginCounts").rdd)
kd.estimate([13.0,14.0]).
我收到错误: Py4JJavaError:调用o647.estimateKernelDensity时发生错误。 :org.apache.spark.SparkException:作业由于阶段失败而中止
现在我的最终目标是让kde在基于一天的时间基础上输入数据,然后使用第二天的数据来获得每个登录计数的概率估计值。 例如:我想实现这种性质:
df.withColumn("kdeProbs",kde.estimate(col("LoginCounts)))
因此列kdeProbs将包含P(LoginCount = x |估计kde)。
我已经尝试过搜索相同的示例,但我总是被重定向到spark.apache.org页面上的标准kde示例,但这并没有解决我的问题。
答案 0 :(得分:0)
仅选择一列并将其转换为RDD是不够的;您还需要在该列中选择实际数据才能正常工作。试试这个:
from pyspark.mllib.stat import KernelDensity
dat_rdd = df.select("LoginCounts").rdd
# actually select data from RDD
dat_rdd_data = dat_rdd.map(lambda x: x[0])
kd = KernelDensity()
kd.setSample(dat_rdd_data)
kd.estimate([13.0,14.0])