Apache spark 如何将字符串数组转换为numpy数组并将其传递给Pyspark中的UDF?
我在CSV文件中将Numpy数组存储为字符串数组(不知道其他方法)。现在我面临两个问题 1) 我需要读取CSV文件并将字符串数组转换为numpy数组,然后将其传递给UDF 2) 为什么我不能使用DF.withcolumn方法?它抛出下面的错误 回溯(最近一次调用):文件“”,第1行,在 文件“/usr/lib/spark/python/pyspark/sql/dataframe.py”,第行 1989年,在专栏中 assert-isinstance(col,Column),“col应该是Column”AssertionError:col应该是Column 我的代码片段-Apache spark 如何将字符串数组转换为numpy数组并将其传递给Pyspark中的UDF?,apache-spark,pyspark,Apache Spark,Pyspark,我在CSV文件中将Numpy数组存储为字符串数组(不知道其他方法)。现在我面临两个问题 1) 我需要读取CSV文件并将字符串数组转换为numpy数组,然后将其传递给UDF 2) 为什么我不能使用DF.withcolumn方法?它抛出下面的错误 回溯(最近一次调用):文件“”,第1行,在 文件“/usr/lib/spark/python/pyspark/sql/dataframe.py”,第行 1989年,在专栏中 assert-isinstance(col,Column),“col应该是Colu
def wantNumpyArr(array):
try:
//some code//
except Exception:
pass
else:
return float_var
spark.udf.register("wantNumpyArr", wantNumpyArr, FloatType())
#Read from csv file
read_data=spark.read.format("csv").load("/path/to/file/part-*.csv", header="true")
rdd = read_data.rdd
convert_data = rdd.map(lambda x: (x[0], x[1], wantNumpyArr(x[2])))
当我打印convert_data RDD时,它的第三列值始终为“None”,这意味着UDF中的流总是进入除块之外的其他列。
样本数据-
[Row(Id='ABCD505936', some_string='XCOYNZGAE', array='[0, 2, 5, 6, 8, 10, 12, 13, 14, 15]')]
DF的模式是-
print (read_data.schema)
StructType(List(StructField(col1,StringType,true),StructField(col2,StringType,true),StructField(col3,StringType,true)))
试着理解UDF内部发生了什么。您怀疑抛出了一个异常-请确定这一点。删除except子句,看看会发生什么。进行转换将浪费大量时间/资源。使用pandas_udf,数据将自动转换为pandas dataframe,它是numpy顶部的包装器