尝试缓存时,PySpark Grouby DataFrame无响应

时间:2016-09-27 13:33:32

标签: caching apache-spark pyspark distributed-computing spark-dataframe

我有一个~60gb的文件,行数约为755m。我正在使用这个文件,并将其重新整形为一个特征集,这意味着它将转换为~27350x27350矩阵。

from pyspark.sql.types import *
from pyspark.sql.functions import *

schema = [StructField("_id", StringType(), False), StructField("minor_id", StringType(), False), StructField("minor_seq_len", IntegerType(), False), StructField("major_id", StringType(), False), StructField("major_seq_len", IntegerType(), False), StructField("optimal_alignment_score", IntegerType(), False)]
schema = StructType(schema)
df = spark.read.csv(path="file.csv", header=True, inferSchema=False, mode="FAILFAST", schema=schema)
df = df.withColumn("e_val", 0.027 * df['major_seq_len'] * df['minor_seq_len'] * exp(-1 * 0.239 * df['optimal_alignment_score']))
df = df.withColumn("p_val", 1 - exp(-1 * df['e_val'])).cache()
df.count()
pivot = df.groupby("major_id").pivot("minor_id").mean("p_val")

以上工作完美。在查看PySpark Application UI时,我可以在存储页面下看到df rdd。但是,当我打电话时:

pivot.cache()

一切都没有反应。没有作业显示,并且数据透视表rdd未显示在存储选项卡中。 pyspark shell行向下移动(就像它运行命令一样),但似乎永远不会完成。我尝试使用.persist(),有各种选项,并尝试将两行合并:pivot.cache(); pivot.count()希望它可以推进,但没有任何效果。

此外,如果我中断.cache()步骤,并尝试执行其他操作(df.count()),则无响应。

此步骤无法缓存是否正常?

更新

我尝试用以下方法缩小数据集:

pivot = df.groupby("major_id").pivot("minor_id").mean("p_val")
sample_df = pivot.sample(False, 0.0001) # this is ~26 rows.
sample_df.cache().count()

然而,最后一行很长一段时间。仍然没有火花作业状态,UI中没有生成任何作业,各种UI中的任何其他地方也没有,日志中没有任何内容,也没有任何其他内容。它只是坐在那里 - 清醒和反应迟钝。

0 个答案:

没有答案