【问题标题】:How to change SparkContext property spark.sql.pivotMaxValues in jupyter PySpark session如何在 jupyter PySpark 会话中更改 SparkContext 属性 spark.sql.pivotMaxValues
【发布时间】:2018-05-25 23:12:26
【问题描述】:

问:如何在 jupyter PySpark 会话中更改 SparkContext 属性 spark.sql.pivotMaxValues

我做了以下代码更改以增加 spark.sql.pivotMaxValues。遗憾的是,重新启动 jupyter 并再次运行代码后,它对产生的错误没有影响。

from pyspark import SparkConf, SparkContext
from pyspark.mllib.linalg import Vectors
from pyspark.mllib.linalg.distributed import RowMatrix
import numpy as np
try:
    #conf = SparkConf().setMaster('local').setAppName('autoencoder_recommender_wide_user_record_maker') # original
    #conf = SparkConf().setMaster('local').setAppName('autoencoder_recommender_wide_user_record_maker').set("spark.sql.pivotMaxValues", "99999")
    conf = SparkConf().setMaster('local').setAppName('autoencoder_recommender_wide_user_record_maker').set("spark.sql.pivotMaxValues", 99999)
    sc = SparkContext(conf=conf)
except:
    print("Variables sc and conf are now defined. Everything is OK and ready to run.")

<...>

df = sess.read.csv(in_filename, header=False, mode="DROPMALFORMED", schema=csv_schema)
ct = df.crosstab('username', 'itemname')

在我的交叉表代码行中引发的 Spark 错误消息:

IllegalArgumentException: "requirement failed: The number of distinct values for itemname, can't exceed 1e4. Currently 16467"

我希望我实际上并没有设置我试图设置的配置变量,那么有什么方法可以让该值实际设置,如果可能的话以编程方式?谢谢。

参考资料:

最后,您可能有兴趣知道有一个最大数量 如果未指定,则为透视列的值。这主要是 捕捉错误并避免OOM情况。配置键是 spark.sql.pivotMaxValues,默认值为 10,000。

来源:https://databricks.com/blog/2016/02/09/reshaping-data-with-pivot-in-apache-spark.html

我更愿意向上更改配置变量,因为我已经编写了交叉表代码,它在较小的数据集上效果很好。如果事实证明确实无法更改此配置变量,那么我的备份计划是:

  • 使用关系右外连接来实现我自己的 Spark 交叉表,其容量比 databricks 提供的容量大
  • scipy 密集向量与使用字典的手工唯一组合计算代码

【问题讨论】:

  • 你能让这个工作吗?我遇到了同样的问题,设置 spark.sql.pivotMaxValues 似乎不起作用!
  • 我也有同样的问题。但是我改变了它但没有影响

标签: python apache-spark pyspark


【解决方案1】:

kernel.json

这个配置文件应该和jupyter一起分发 ~/.ipython/kernels/pyspark/kernel.json

它包含 SPARK 配置,包括变量 PYSPARK_SUBMIT_ARGS - 将与 spark-submit 脚本一起使用的参数列表。

您可以尝试在上述脚本中将--conf spark.sql.pivotMaxValues=99999 添加到此变量中。

PS 还有一些情况是人们试图覆盖这个变量programmatically。你也可以试试...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多