【发布时间】: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