gpt4 book ai didi

apache-spark - Spark DenseVector 的输出转换为 StringType

转载 作者:行者123 更新时间:2023-12-04 13:22:33 26 4
gpt4 key购买 nike

当转换为 StringType 时,DenseVector 输出中的额外值是什么?

以下应该是可重现的。

spark = pyspark.sql.SparkSession.builder.getOrCreate()
spark.version

# u'2.2.0.cloudera1'

from pyspark.ml.linalg import DenseVector
import pyspark.sql.functions as F
import pyspark.sql.types as T

testdf = spark.createDataFrame([\
(DenseVector([2, 3]),),\
(DenseVector([4, 5]),),\
(DenseVector([6, 7]),)],\
['DenseVectors'])

testdf \
.withColumn('DenseVector as String', F.col('DenseVectors')
.cast(T.StringType())) \
.show(truncate=False)

#+------------+----------------------------------------------------------+
#|DenseVectors|DenseVector as String |
#+------------+----------------------------------------------------------+
#|[2.0,3.0] |[6,1,0,0,2800000020,2,0,4000000000000000,4008000000000000]|
#|[4.0,5.0] |[6,1,0,0,2800000020,2,0,4010000000000000,4014000000000000]|
#|[6.0,7.0] |[6,1,0,0,2800000020,2,0,4018000000000000,401c000000000000]|
#+------------+----------------------------------------------------------+

最佳答案

这些不是额外的值。矢量实现为 UserDefinedType (org.apache.spark.mllib.linalg.VectorUDT/org.apache.spark.ml.linalg.VectorUDT - 对于 Spark 2,你通常应该使用后者)并且没有有用的转换实现(如果有一个会很好,所以也许你可以打开一个 JIRA ticket 如果没有的话)。

您所看到的只是内部结构的反射(reflect),其中包含:

  • 类型编码为字节。
  • 向量稀疏时的长度。
  • 如果向量是稀疏的,则索引向量。
  • 值(value)观向量。

并且不是为了人类可读而设计的。

要获得可读的输出,请使用 udf

@F.udf
def to_string(v):
return str(v)

testdf.select(to_string("DenseVectors")).show()
# +-----------------------+
# |to_string(DenseVectors)|
# +-----------------------+
# | [2.0,3.0]|
# | [4.0,5.0]|
# | [6.0,7.0]|
# +-----------------------+

关于apache-spark - Spark DenseVector 的输出转换为 StringType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48412113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com