簡體   English   中英

在 pyspark 中將向量類型轉換為雙精度類型

[英]Convert vector type to double type in pyspark

我有以下火花 dataframe:

+--------------------+--------------------+
|                  f1|                  f2|
+--------------------+--------------------+
| [380.1792652309408]|[-91793.40296983652]|
|[-18662.02751719936]|[-99674.18149372772]|
|[-736.5125444921572]| [-23736.3626879109]|
|[-143436.24812848...|[-136748.6250801389]|
|[-10325.057466551...|[-108747.85455021...|
|[-9771.868356757912]|[-164454.02688403...|

但我想將這些列中的值從向量類型轉換為雙 output。 我該怎么做?

樣品 output:

+--------------------+--------------------+
|                  f1|                  f2|
+--------------------+--------------------+
| 380.1792652309408|-91793.40296983652|
|-18662.02751719936|-99674.18149372772|
|-736.5125444921572| -23736.3626879109|
|-143436.24812848...|-136748.6250801389|
|-10325.057466551...|-108747.85455021...|
|-9771.868356757912|-164454.02688403...|

更新了答案。 由於我沒有使用 Row,因此對原始答案進行了改進。

隨着強制停機時間在后台做一些 pyspark 和機器學習的東西。 這里重點關注基數 > 1 且所有行中的基數相同的向量,這是有意義的。 並重命名cols。

您現在可以使用此示例:

%python
from pyspark.ml.linalg import Vectors
from pyspark.sql import Row

source_data = [
    Row(city="AMS", temps=Vectors.dense([-1.0, -2.0, -3.0])),
    Row(city="BRU", temps=Vectors.dense([-7.0, -7.0, -5.0])),
              ]
df = spark.createDataFrame(source_data)

def convertToCols(row):
    return ( tuple(row.temps.toArray().tolist()))

df2 = df.rdd.map(convertToCols).toDF(["C1"]) 
df3 = df2.toDF(*(c.replace('_', 'C') for c in df2.columns)) 
df3.show()

返回:

+----+----+----+
|  C1|  C2|  C3|
+----+----+----+
|-1.0|-2.0|-3.0|
|-7.0|-7.0|-5.0|
+----+----+----+

在我的示例中,重要的是使用 Row 來創建 DF 內聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM