如何在jupyter PySpark会话

时间:2018-05-25 13:54:39

标签: python apache-spark pyspark

问:如何在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

我更倾向于向上更改配置变量,因为我已经编写了交叉表代码,它在较小的数据集上运行良好。如果事实证明真的没有办法改变这个配置变量,那么我的备份计划依次是:

  • 关系右外连接实现我自己的Spark交叉表,其容量高于databricks提供的容量
  • scipy密集向量与手工制作的独特组合使用词典计算代码

1 个答案:

答案 0 :(得分:0)

kernel.json

此配置文件应与jupyter一起分发 ~/.ipython/kernels/pyspark/kernel.json

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

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

PS 在某些情况下,人们会尝试覆盖此变量programmatically。你也可以尝试一下......