我有一个~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中的任何其他地方也没有,日志中没有任何内容,也没有任何其他内容。它只是坐在那里 - 清醒和反应迟钝。