PySpark에서는 VectorUDT로 저장된 벡터 열에서 개별 차원을 추출해야 할 수도 있습니다. 이를 달성하려면 Spark 버전에 따라 다양한 접근 방식을 활용할 수 있습니다.
Spark >= 3.0.0
PySpark 3.0.0은 다음을 위한 내장 기능을 제공합니다. 이 작업:
<code class="python">from pyspark.ml.functions import vector_to_array df.withColumn("xs", vector_to_array("vector")).select(["word"] + [col("xs")[i] for i in range(3)])</code>
이 작업은 벡터를 배열로 간결하게 변환하고 원하는 열을 투영합니다.
Spark < 3.0.0
3.0.0 이전 Spark 버전에는 더 복잡한 접근 방식이 필요합니다.
RDD 변환:
<code class="python">df.rdd.map(lambda row: (row.word,) + tuple(row.vector.toArray().tolist())).toDF(["word"])</code>
UDF 방법:
<code class="python">from pyspark.sql.functions import udf, col from pyspark.sql.types import ArrayType, DoubleType def to_array(col): return udf(lambda v: v.toArray().tolist(), ArrayType(DoubleType()))(col) df.withColumn("xs", to_array(col("vector"))).select(["word"] + [col("xs")[i] for i in range(3)])</code>
참고: 성능 향상을 위해 asNondeterministic이 UDF와 함께 사용되는지 확인하세요(Spark 2.3 필요).
Scala 동등
이러한 접근 방식과 동등한 Scala는 "Spark Scala: Dataframe[벡터]를 DataFrame[f1:Double, ..., fn: Double)]로 변환하는 방법"을 참조하세요.
위 내용은 PySpark에서 VectorUDT를 열로 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!