使用Quantlib函数的Pyspark自定义函数
我一直在试验Quantlib和Spark,试图在Pyspark中传递Quantlib函数,请参见下面的示例:使用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",),
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字符串