问:如何在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"
我希望我实际上并没有设置我尝试设置的配置变量,那么如果可能的话,有什么方法可以实际设置该值?感谢。
参考文献:
最后,您可能有兴趣知道有一个最大数字 如果没有指定,则为pivot列的值。这主要是 捕捉错误并避免OOM情况。配置密钥是 spark.sql.pivotMaxValues及其默认值为10,000。
来源:https://databricks.com/blog/2016/02/09/reshaping-data-with-pivot-in-apache-spark.html
我更倾向于向上更改配置变量,因为我已经编写了交叉表代码,它在较小的数据集上运行良好。如果事实证明真的没有办法改变这个配置变量,那么我的备份计划依次是:
答案 0 :(得分:0)
kernel.json
此配置文件应与jupyter一起分发
~/.ipython/kernels/pyspark/kernel.json
它包含SPARK配置,包括变量 PYSPARK_SUBMIT_ARGS - 将与spark-submit
脚本一起使用的参数列表。
您可以尝试在提及的脚本中将--conf spark.sql.pivotMaxValues=99999
添加到此变量。
PS 在某些情况下,人们会尝试覆盖此变量programmatically。你也可以尝试一下......