使用Quantlib函数的Pyspark自定义函数

使用Quantlib函数的Pyspark自定义函数,pyspark,quantlib,Pyspark,Quantlib,我一直在试验Quantlib和Spark,试图在Pyspark中传递Quantlib函数,请参见下面的示例: from QuantLib import * from pyspark.sql.types import StringType from pyspark.sql.functions import udf df = sc.parallelize([("2016-10-01",), ("2016-11-01",),

我一直在试验Quantlib和Spark,试图在Pyspark中传递Quantlib函数,请参见下面的示例:

from QuantLib import *
from pyspark.sql.types import StringType
from pyspark.sql.functions import udf


df = sc.parallelize([("2016-10-01",),
                     ("2016-11-01",),
                     ("2016-12-01",)]).toDF(['someDate'])

testudf = udf(lambda x: str(DateParser.parseFormatted(x,'%Y-%m-%d')), StringType())

df.withColumn('new', testudf('someDate')).show()
到目前为止我还没有成功,我想知道是否有人运气更好

以下是我得到的错误:

typeError: in method 'DateParser_parseFormatted', argument 1 of type 'std::string const &'
    at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
    at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:234)
typeError:在方法“DateParser\u parseFormatted”中,参数1的类型为“std::string const&”
位于org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
位于org.apache.spark.api.python.PythonRunner$$anon$1。(PythonRDD.scala:234)

< C++ >代码> > DateParser。PARSEFALATEDATION//CUT>方法对类型有特殊性,不能使用火花字符串<代码> x>代码>,UDF机械正在传递给lambda。您必须将
x
转换回lambda中的Python字符串。我不熟悉Spark及其类型,但可能是
str(x)
,如

lambda x: str(DateParser.parseFormatted(str(x), '%Y-%m-%d'))
我可以做这项工作吗


作为旁注,我不确定lambda中的外部
str
有什么意义。您正在获取一个字符串,通过
DateParser
将其转换为
Date
对象,然后再次将结果转换为字符串…

…您到底是如何没有成功的?传递到
udf
中lambda的
x
的确切类型是什么?它是Python字符串还是某种Spark类型?X将是Spark字符串