我有看起来像这样的数据:

| Id | ----Tags---- | some_text |
| 0  | <a><b>       | ex1       |
| 1  | <a><c>       | ex2       |
| 2  | <b><c>       | ex3       |

我希望它最终看起来像这样:

| Id | a | b | c | some_text |
| 0  | 1 | 1 | 0 | ex1       |
| 1  | 1 | 0 | 1 | ex2       |
| 2  | 0 | 1 | 1 | ex3       |

我想使用pyspark作为解决方案。 关于如何解决此问题的任何想法?

#1楼 票数:0 已采纳

如果您尚不知道预期的分类值,则可以使用pyspark.sql.functions.udf拆分并标记为值数组,然后使用pyspark.sql.functions.explode函数将其转换为列。 然后,您可以将值透视到列:

# required imports
import pyspark.sql.functions as F
from pyspark.sql.types import ArrayType, StringType
import re

# regex pattern to split 'tagged values'
pat = re.compile('<(.*?)>')

#udf to split string to array of values
split_f = f.udf(lambda s: pat.split(s), ArrayType(StringType()))

# sample data
df = spark.createDataFrame([(0,'<a><b>','ex1'),(1,'<a><c>','ex2')], ['Id', '---Tags---', 'some_text'])

+---+----------+---------+
| Id|---Tags---|some_text|
+---+----------+---------+
|  0|    <a><b>|      ex1|
|  1|    <a><c>|      ex2|
+---+----------+---------+

df.withColumn('exploded', 
   F.explode(split_f(F.col('---Tags---'))))
  .groupby('Id').pivot('exploded').count().na.fill(0).show()

+---+---+---+---+
| Id|  a|  b|  c|
+---+---+---+---+
|  0|  1|  1|  0|
|  1|  1|  0|  1|
+---+---+---+---+

  ask by Gopal Vashishtha translate from so

未解决问题?本站智能推荐:

4回复

pyspark-将一次热编码后获得的稀疏向量转换为列

我正在使用 apache Spark ML lib 来处理使用一种热编码的分类特征。 编写以下代码后,我得到一个向量c_idx_vec作为一个热编码的输出。 我确实了解如何解释这个输出向量,但我无法弄清楚如何将此向量转换为列,以便我获得一个新的转换数据框。以这个数据集为例:>>>
1回复

PySpark:OneHotEncoder的输出看起来很奇怪[重复]

这个问题已经在这里有了答案: Spark ML VectorAssembler返回奇怪的输出 1个答案 Spark文档包含其OneHotEncoder 的PySpark示例 : 我期望列categoryVec看起来像这样: 但是categoryVec实际上看起来像这样:
1回复

pyspark中的一键编码,其中连续有多个1

我有一个Python数据final_df ,如下所示: 这些行具有重复的ID值。 如何使用pyspark获得如下所示的一键编码输出? 我已经将其转换为spark数据框: 然后在CONCEPTS列中收集唯一值,如下所示: 但是,当我致电以下内容时: 我得到以下信息:
1回复

适合管道PySpark时,输出列已存在错误

我正在尝试在 PySpark 中创建一个管道,以便为随机森林准备我的数据。 我使用的是Spark 2.2 (2.2.0.2.6.4.0-91)。 我的数据不包含空值。 我确定了分类列和数字列。 我正在编码分类列并定义我的标签( options['vae'] )。 然后我使用 VectorAssemb
2回复

随机森林回归分类输入PySpark

我一直在尝试在PySpark上做一个简单的随机森林回归模型。 我对R机器学习有很好的体验。但是,对我来说,Pyspark上的ML看起来完全不同 - 特别是在处理分类变量,字符串索引和OneHotEncoding时(当只有数字变量时,我能够仅通过以下示例执行RF回归)。 虽然有很多可用于处理分
1回复

OneHotEncoding:在一个数据帧中工作,而不是在非常非常相似的数据帧(pyspark)中工作

我正在将 OneHotEncoding 函数应用于两个非常相似的数据帧。 第一个数据框如下: 当我应用一种热编码时,一切正常: 但是,当我将完全相同的函数应用于这个不同但非常相似的数据帧时: 出现以下错误: 我不明白为什么会发生这种情况,因为数据帧 1 和 2 都是从以前的数据帧中提取的(它
1回复

使用pyspark.ml神经网络分类器进行预处理后如何获取特征数量?

我正在尝试使用pyspark.ml建立一个神经网络。 问题是我正在使用onehotencoder和其他预处理方法来转换分类变量。 我准备中的阶段是: 索引分类特征 使用Onehotencoder 使用向量汇编器 然后我申请PCA 将“ pcaFeatures”提
1回复

PySpark-OneHotEncoding

这可能很幼稚,但我只是从PySpark和Spark入手。 请帮助我了解Pyspark中的一种热门技术。 我正在尝试对其中一列进行OneHotEncoding。 进行一次热编码后,数据帧架构将添加一个向量。 但是要应用机器学习算法,那应该是将单个列添加到现有数据框中,每个列代表一个类别,但