将字符串列转换为矢量列Spark DataFrames

斯蒂金

我有一个Spark数据框,看起来如下:

+-----------+-------------------+
|     ID    |     features      |
+-----------+-------------------+
|   18156431|(5,[0,1,4],[1,1,1])|
|   20260831|(5,[0,4,5],[2,1,1])|   
|   91859831|(5,[0,1],[1,3])    |
|  206186631|(5,[3,4,5],[1,5])  |
|  223134831|(5,[2,3,5],[1,1,1])|
+-----------+-------------------+

在此数据框中,特征列是稀疏向量。在我的脚本中,我必须将此DF作为文件保存在磁盘上。这样做时,features列另存为text列:example "(5,[0,1,4],[1,1,1])"如您所料,在Spark中再次导入时,该列将保留字符串。如何将列转换回(稀疏)矢量格式?

零323

由于UDF开销不是特别有效(使用保留类型的格式是一个好主意),但是您可以执行以下操作:

from pyspark.mllib.linalg import Vectors, VectorUDT
from pyspark.sql.functions import udf

df = sc.parallelize([
    (18156431, "(5,[0,1,4],[1,1,1])") 
]).toDF(["id", "features"])

parse = udf(lambda s: Vectors.parse(s), VectorUDT())
df.select(parse("features"))

请注意,这不会直接移植到2.0.0+和ML Vector由于ML向量不提供parse您必须解析MLLib并使用的方法asML

parse = udf(lambda s: Vectors.parse(s).asML(), VectorUDT())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spark Dataframes:将unix指数数字转换为字符串整数以获得时间戳

Spark:将字符串列转换为数组

将 spark 字符串列转换为 vectorUDT

spark scala:将结构数组列转换为字符串列

如何将字符串列转换为日期列

将字符串列转换为小时

Spark DataFrames:registerTempTable与否

将字符串转换为字符串列表

将多个numpy数组批量转换为pandas DataFrames

如何将DataFrames转换为嵌套列表

将Dask Bag of Pandas DataFrames转换为单个Dask DataFrame

将 Pandas Dataframes 列表转换为单个列表?

Spark for Python-无法将字符串列转换为十进制/双精度

将带有字符串列的spark数据帧转换为StructType列

将列中的字符串列表转换为分隔列 Python

熊猫:将包含字符串列表的列转换为每个值的新列

使用 Dataframes 的 Spark Overlap 算法

循环转换Pandas Dataframes值

使用 Spark DataFrames 查询 JSON 数据列

将Pandas df列的字符串列表转换为int

如何使用 Pyspark 将字符串列转换为十进制列

将调查列表对象转换为数据框并将字符串列拆分为多列

如何使用动态linq将两列转换为单个字符串列?

Python:将字符串列转换为日期时间列('%d/%m/%YT%H:%M:%S')

将字符串列转换为多个二进制列

如何将具有字符串列表的行转换为多列

在 Google BigQuery 中使用 SQL 将字符串列转换为数字列

如何将Data gridview列转换为字符串列表?

Julia DataFrames从多个列过滤