Bru*_*uno 1 dataframe apache-spark pyspark apache-spark-ml
如何将Vectors.dense列添加到pyspark数据框?
import pandas as pd
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.ml.linalg import DenseVector
py_df = pd.DataFrame.from_dict({"time": [59., 115., 156., 421.], "event": [1, 1, 1, 0]})
sc = SparkContext(master="local")
sqlCtx = SQLContext(sc)
sdf = sqlCtx.createDataFrame(py_df)
sdf.withColumn("features", DenseVector(1))
Run Code Online (Sandbox Code Playgroud)
在文件anaconda3/lib/python3.6/site-packages/pyspark/sql/dataframe.py第1848行中给出错误:
AssertionError: col should be Column
Run Code Online (Sandbox Code Playgroud)
它不喜欢将DenseVector类型作为列。本质上,我有一个pandas数据框,我想将其转换为pyspark数据框并添加type的列Vectors.dense。还有另一种方法吗?
常量Vectors不能作为文字添加。您必须使用udf:
from pyspark.sql.functions import udf
from pyspark.ml.linalg import VectorUDT
one = udf(lambda: DenseVector([1]), VectorUDT())
sdf.withColumn("features", one()).show()
Run Code Online (Sandbox Code Playgroud)
但是我不确定为什么您需要它。如果您想将现有的列转换为Vectors使用适当的pyspark.ml工具,例如VectorAssembler- 在PySpark中编码和组合多个功能
from pyspark.ml.feature import VectorAssembler
VectorAssembler(inputCols=["time"], outputCol="features").transform(sdf)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |