如何在pyspark中绘制多列箱形图?

yftpprvb  于 2023-03-07  发布在  Spark
关注(0)|答案(1)|浏览(85)

我有一个pyspark Dataframe (pyspark.sql.dataframe.dataframe)。我想在箱线图中绘制数值列以检测异常值。
我首先只选择数字列,其中:

numeric_columns = [item[0] for item in df.dtypes if item[1].startswith('float')]

我试着使用plotly,但后来我发现首先我需要转换成一个Pandas数据框架。所以,我做了:

df_pd = df.toPandas()

fig = px.box(df_pd[numeric_columns])
fig.show()

出现错误:"命令结果大小超出限制:超过20971520字节(当前= 20973190)"
我想这个数据集太大了,不适合Pandas。你能帮帮我吗?有没有可能直接在pyspark Dataframe 中创建绘图?
谢谢你。

kknvjkwl

kknvjkwl1#

首先,要小心toPandas。Spark用于“大数据”分析,例如当数据不在一台计算机上时。当你运行toPandas时,你的数据会从集群收集到你运行Python进程的服务器上。
其次,为了修复错误,需要正确配置Spark会话,需要将driver.memorymaxResultSize参数设置为大于数据集
看起来可能像是

from pyspark.sql import SparkSession

app_name = 'Your App'

conf = {
    
    # some basic stuff

    'spark.dynamicAllocation.enabled': 'true',
    'spark.shuffle.service.enabled': 'true',
    'spark.dynamicAllocation.maxExecutors': 10,
    'spark.executor.memory': '32g',
    'spark.executor.cores': '4',

    # driver params
    'spark.driver.memory': '2g',
    'spark.driver.maxResultsSize': '2g',

    # some other params here
}

builder = (
    SparkSession
    .builder
    .appName(app_name)
)

for k, v in conf.items():
    builder.config(k, v)

spark = builder.getOrCreate()

第三,如果数据集大于本地处理能力,请使用采样

# sample 1% of data
pdf = df.sample(0.01).toPandas()

相关问题