1. 首页
  2. Python

在将.toArray()用于Spark向量后,它应该是什么类型?

“u003Cdivu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002Fb5ec7042-148c-4596-9240-000178deb18a” img_width=”1200″ img_height=”1200″ alt=”在将.toArray()用于Spark向量后,它应该是什么类型?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E我想将向量转移到数组,所以我用这个u003Cu002Fpu003Eu003Cpreu003Eget_array = udf(lambda x: x.toArray(),ArrayType(DoubleType()))u003Cbru003Eresult3 = result2.withColumn(‘list’,get_array(‘features’))u003Cbru003Eresult3.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E其中列features是向量dtype。但是Spark告诉我u003Cu002Fpu003Eu003Cpreu003E net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for numpy.core.multiarray._reconstruct)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E我知道原因一定是我在UDF中使用的类型,所以我尝试了get_array = udf(lambda x: x.toArray(),ArrayType(FloatType())),它也无法正常工作。我知道传输后它是numpy.narray,但是如何正确显示呢?u003Cu002Fpu003Eu003Cpu003E这是我如何获取数据框result2的代码:u003Cu002Fpu003Eu003Cpreu003Edf4 = indexed.groupBy(‘uuid’).pivot(‘name’).sum(‘fre’)u003Cbru003Edf4 = df4.fillna(0)u003Cbru003Efrom pyspark.ml.feature import VectorAssembler u003Cbru003Eassembler = VectorAssembler(u003Cbru003E inputCols=df4.columns[1:],u003Cbru003E outputCol=”features”)u003Cbru003Edataset = assembler.transform(df4)u003Cbru003Ebk = BisectingKMeans(k=8, seed=2, featuresCol=”features”)u003Cbru003Eresult2 = bk.fit(dataset).transform(dataset)u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002F4f868369-f212-4aa7-8d15-dea6ab59d450″ img_width=”1200″ img_height=”670″ alt=”在将.toArray()用于Spark向量后,它应该是什么类型?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E索引看起来像这样:u003Cu002Fpu003Eu003Cpreu003E+——————+————+———+————-+————+———-+——–+—-+u003Cbru003E| uuid| category| code| servertime| cat| fre|catIndex|name|u003Cbru003E+——————+————+———+————-+————+———-+——–+—-+u003Cbru003E| 351667085527886| 398| null|1503084585000| 398|0.37951264| 2.0| a2|u003Cbru003E| 352279079643619| 403| null|1503105476000| 403| 0.3938634| 3.0| a3|u003Cbru003E| 352279071621894| 398| null|1503085396000| 398|0.38005984| 2.0| a2|u003Cbru003E| 357653074851887| 398| null|1503085552000| 398| 0.3801652| 2.0| a2|u003Cbru003E| 354287077780760| 407| null|1503085603000| 407|0.38019964| 5.0| a5|u003Cbru003E|0_8f394ebf3f67597c| 403| null|1503084183000| 403|0.37924168| 3.0| a3|u003Cbru003E| 353528084062994| 403| null|1503084234000| 403|0.37927604| 3.0| a3|u003Cbru003E| 356626072993852| 100000504|100000504|1503104781000| 100000504| 0.3933774| 0.0| a0|u003Cbru003E| 351667081062615| 100000448| 398|1503083901000| 398|0.37905172| 2.0| a2|u003Cbru003E| 354330089551058|1.00000444E8| null|1503084004000|1.00000444E8|0.37912107| 34.0| a34|u003Cbru003E+——————+————+———+————-+————+———-+——–+—-+u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E在中result2,我有一些类型为的列double,然后使用VectorAssembler组装这些双列为vector features,这是我要传输到数组的列。u003Cu002Fpu003Eu003Ch1u003E解决方案u003Cu002Fh1u003Eu003Cpu003ENumPy的类型不支持的返回值的UserDefinedFunctions。您必须将输出转换为标准Python list:u003Cu002Fpu003Eu003Cpreu003Eudf(lambda x: x.toArray().tolist(), ArrayType(DoubleType()))u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002Fd48faecc-07b8-4d29-a302-0c0e9d4d7349″ img_width=”1200″ img_height=”1198″ alt=”在将.toArray()用于Spark向量后,它应该是什么类型?” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:在将.toArray()用于Spark向量后,它应该是什么类型?

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/12846.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code