如何有效地加入和 groupBy pyspark 数据框?

时间:2021-04-07 23:54:25

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

我使用 python pyspark 数据框。我有大约 70 GB 的 json 文件,它们基本上是电子邮件。目的是对电子邮件正文执行 TF-IDF。首先,我已将面向记录的 json 转换为 HDFS。对于 tf-idf 实现,首先我使用 spark NLP 进行了一些数据清理,然后是基本的计算 tf、idf 和 tf-idf,其中包括几个 groupBy() 和 join() 操作。该实现适用于小样本数据集,但是当我使用整个数据集运行时,我收到以下错误:

Py4JJavaError: An error occurred while calling o506.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 107 in stage 7.0 failed 4 times, most recent failure: Lost task 107.3 in stage 7.0 : ExecutorLostFailure (executor 72 exited caused by one of the running tasks) Reason: Container from a bad node: container_1616585444828_0075_01_000082 on host: Exit status: 143. Diagnostics: [2021-04-08 01:02:20.700]Container killed on request. Exit code is 143
[2021-04-08 01:02:20.701]Container exited with a non-zero exit code 143. 
[2021-04-08 01:02:20.702]Killed by external signal

示例代码:

df_1 = df.select(df.id,explode(df.final).alias("words"))
df_1= df_1.filter(length(df_1.words) > '3')
df_2 = df_1.groupBy("id","words").agg(count("id").alias("count_id"))

我在第三步出错,即 df_2 = df_1.groupBy("id","words").agg(count("id").alias("count_id"))

我尝试过的事情:

  1. set("spark.sql.broadcastTimeout", "36000")
  2. df_1.coalesce(20) 之前 groupBy()
  3. 检查空值 -> 在任何 df 中都没有空值

到目前为止没有任何效果。由于我对 pyspark 非常陌生,因此我非常感谢您提供有关如何使实现更高效和快速的帮助。

0 个答案:

没有答案
相关问题