Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何将字符串数组转换为numpy数组并将其传递给Pyspark中的UDF?_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 如何将字符串数组转换为numpy数组并将其传递给Pyspark中的UDF?

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

我在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

我的代码片段-

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顶部的包装器