lambda - Lambda函数中的Pyspark UDF函数错误

标签 lambda error-handling pyspark user-defined-functions

我在下面编写了udf函数,它引发了一个错误。请帮忙。

下面是我的数据集;

df1 = sqlContext.range(0, 1000)\
 .withColumn('normal1',func.abs(10*func.round(randn(seed=1),2)))\
 .withColumn('normal2',func.abs(100*func.round(randn(seed=2),2)))\
 .withColumn('normal3',func.abs(func.round(randn(seed=3),2)))

df1 = df1.withColumn('Y',when(df1.normal1*df1.normal2*df1.normal3>750, 1)\
       .otherwise(0))

udf功能如下:
from pyspark.sql import types as T
balancingRatio=0.8
calculateWeights = udf(lambda d:(1 * balancingRatio) if d==0 else (1 * (1.0 -   balancingRatio)),T.IntegerType())
weightedDataset = df1.withColumn('classWeightCol', calculateWeights('Y'))
weightedDataset.show() 

这需要一些时间,使我出错。
Py4JJavaError: An error occurred while calling o670.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 
in stage 25.0 failed 1 times, most recent failure: Lost task 0.0 in stage 
25.0 (TID 427, localhost, executor driver): org.apache.spark.SparkException: 
Python worker failed to connect back.

可能是什么问题?
谢谢。

我发现一个简单的互联网示例也无法正常工作
maturity_udf = udf(lambda age: "adult" if age >=18 else "child", 
 T.StringType())
df = sqlContext.createDataFrame([{'name': 'Alice', 'age': 1}])
df.withColumn("maturity", maturity_udf(df.age)).show()

不是:我有python 3.7.1和spark 2.4

最佳答案

您需要通过将OBJC_DISABLE_INITIALIZE_FORK_SAFETY变量设置为YES来禁用前叉安全性。这为我解决了这个问题。

import os
os.environ['OBJC_DISABLE_INITIALIZE_FORK_SAFETY'] = 'YES'

关于lambda - Lambda函数中的Pyspark UDF函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457975/

相关文章:

node.js - MongoDB - $merge 可在 Compass 中运行,但不能在 Node.js Lambda 中运行

php - PHP : REQUEST_METHOD as basic error handling for html form

r - 子架构 'R' 未安装(在 RStudio 中安装某些 CRAN 软件包)

Java 8 - 如何将元素合并到 HashMap

c++ - 使用 lambda 通知编译器要定义哪个函数的替代方案

c++ - 使用 Lambda 表达式在 C++ 中编写指数

node.js - 如何使用 Express 处理 Node.js 中的错误

apache-spark - 如何在SparkSQL中模仿ZEROIFNULL的功能

python - PySpark - 在没有显式 session key 的情况下组合 session 数据/遍历所有行

apache-spark - 为什么我的 pyspark 在启动时在 yarn 中以 ACCEPTED 状态挂起?