相关疑难解决方法(0)

如何访问Spark DataFrame中VectorUDT列的元素?

我有一个数据帧dfVectorUDT指定的列features.如何获取列的元素,比如第一个元素?

我尝试过以下操作

from pyspark.sql.functions import udf
first_elem_udf = udf(lambda row: row.values[0])
df.select(first_elem_udf(df.features)).show()
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict(for numpy.dtype)错误.如果我first_elem_udf = first_elem_udf(lambda row: row.toArray()[0])改为相同的错误.

我也试过,explode()但我得到一个错误,因为它需要一个数组或地图类型.

我认为这应该是一种常见的操作.

dataframe apache-spark apache-spark-sql pyspark apache-spark-ml

16
推荐指数
1
解决办法
5886
查看次数

在 PySpark 中的多列上应用 MinMaxScaler

我想将MinMaxScalarPySpark 应用于 PySpark 数据框的多列df。到目前为止,我只知道如何将它应用于单个列,例如x.

from pyspark.ml.feature import MinMaxScaler

pdf = pd.DataFrame({'x':range(3), 'y':[1,2,5], 'z':[100,200,1000]})
df = spark.createDataFrame(pdf)

scaler = MinMaxScaler(inputCol="x", outputCol="x")
scalerModel = scaler.fit(df)
scaledData = scalerModel.transform(df)
Run Code Online (Sandbox Code Playgroud)

如果我有 100 列怎么办?有没有办法对 PySpark 中的许多列进行最小-最大缩放?

更新:

另外,如何应用MinMaxScalar整数或双精度值?它引发以下错误:

java.lang.IllegalArgumentException: requirement failed: Column length must be of type struct<type:tinyint,size:int,indices:array<int>,values:array<double>> but was actually int.
Run Code Online (Sandbox Code Playgroud)

python apache-spark-sql pyspark

11
推荐指数
2
解决办法
7071
查看次数

将特征的 Spark 向量转换为数组

我有一个 features 列,它使用 Spark 的 VectorAssembler 打包成一个向量向量,如下所示。data是输入数据帧(类型spark.sql.DataFrame)。

val featureCols = Array("feature_1","feature_2","feature_3")
val featureAssembler = new VectorAssembler().setInputCols(featureCols).setOutputCol("features")
val dataWithFeatures = featureAssembler.transform(data)
Run Code Online (Sandbox Code Playgroud)

我现在用的是开发一个自定义分类ClassifierClassificationModel开发者API。ClassificationModel需要开发一个predictRaw()函数,该函数输出模型的预测标签向量。

def predictRaw(features: FeaturesType) : Vector
Run Code Online (Sandbox Code Playgroud)

这个函数是由 API 设置的,它接受一个参数、特征FeaturesType并输出一个 Vector(在我的例子中,我把它当作一个 SparkDenseVector作为DenseVector扩展Vectortrait)。

由于 VectorAssembler 的封装,features列是类型的Vector,每个元素本身就是一个向量,每个训练样本的原始特征。例如:

特征列 - Vector
[1.0, 2.0, 3.0] 类型 - element1,本身是一个向量
[3.5, 4.5, 5.5] - element2,本身是一个向量

我需要将这些功能提取到一个Array[Double]中以实现我的predictRaw()逻辑。理想情况下,我想要以下结果以保留基数:

`val result: Array[Double] …
Run Code Online (Sandbox Code Playgroud)

arrays scala vector apache-spark apache-spark-sql

2
推荐指数
1
解决办法
1万
查看次数