PySpark:连接具有“Struc”数据类型的两列--> 错误:由于数据类型不匹配而无法解析

松子0

我在 PySpark 中有一个数据表,其中包含数据类型为“struc”的两列。

请参阅下面的示例数据框:

word_verb                   word_noun
{_1=cook, _2=VB}            {_1=chicken, _2=NN}
{_1=pack, _2=VBN}           {_1=lunch, _2=NN}
{_1=reconnected, _2=VBN}    {_1=wifi, _2=NN}

我想将两列连接在一起,以便我可以对连接的动词和名词块进行频率计数。

我试过下面的代码:

df = df.withColumn('word_chunk_final', F.concat(F.col('word_verb'), F.col('word_noun')))  

但我收到以下错误:

AnalysisException: u"cannot resolve 'concat(`word_verb`, `word_noun`)' due to data type mismatch: input to function concat should have been string, binary or array, but it's [struct<_1:string,_2:string>, struct<_1:string,_2:string>]

我想要的输出表如下。连接的新字段的数据类型为字符串:

word_verb                   word_noun               word_chunk_final
{_1=cook, _2=VB}            {_1=chicken, _2=NN}     cook chicken
{_1=pack, _2=VBN}           {_1=lunch, _2=NN}       pack lunch
{_1=reconnected, _2=VBN}    {_1=wifi, _2=NN}        reconnected wifi 
泡利

你的代码就快到了。

假设您的架构如下:

df.printSchema()
#root
# |-- word_verb: struct (nullable = true)
# |    |-- _1: string (nullable = true)
# |    |-- _2: string (nullable = true)
# |-- word_noun: struct (nullable = true)
# |    |-- _1: string (nullable = true)
# |    |-- _2: string (nullable = true)

您只需要访问_1每一列字段

import pyspark.sql.functions as F

df.withColumn(
    "word_chunk_final", 
    F.concat_ws(' ', F.col('word_verb')['_1'], F.col('word_noun')['_1'])
).show()
#+-----------------+------------+----------------+
#|        word_verb|   word_noun|word_chunk_final|
#+-----------------+------------+----------------+
#|        [cook,VB]|[chicken,NN]|    cook chicken|
#|       [pack,VBN]|  [lunch,NN]|      pack lunch|
#|[reconnected,VBN]|   [wifi,NN]|reconnected wifi|
#+-----------------+------------+----------------+

此外,您应该使用concat_ws("concatenate with separator") 而不是concat将字符串添加在一起,并在它们之间留一个空格。它类似于str.join在 python 中的工作方式。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么SQL UNION可以合并MySQL中具有不同数据类型的两列?

数据类型不匹配

通过数据类型不匹配的两列连接两个表

两个具有不同数据类型的MapRoute

根据具有R中匹配列的模板更改数据框列的数据类型

PostgreSQL交叉表:月行和天列;错误的rowid数据类型与返回的rowid数据类型不匹配

SparkSQL:由于数据类型不匹配,无法解析“在'表达式'然后1否则0结束'的情况:

蜂巢:如何比较WHERE子句中具有复杂数据类型的两列?

SSIS查找“由于数据类型不匹配,所以无法映射输入列”

如何比较具有不同数据类型组的两列

由于数据类型不匹配PySpark无法解析列

输入的VBA VlookUp无法获取结果,是代码错误还是数据类型不匹配?

将两列具有不同数据类型的Pandas组合

C ++不报告数据类型不匹配的错误或警告

使用RND()的数据类型不匹配

Jaydata中的数据类型不匹配

Access中的数据类型不匹配

DB连接适配器“数据类型不匹配”

返回数据类型不匹配

VBA数据类型不匹配错误13

数据类型不匹配Access 2010

比较具有不同数据类型的两列的最快方法

Excel SQL 数据类型不匹配

解析xml文件时,由于spark中的类型不匹配而无法解析爆炸

类型错误:数组数据类型和格式说明符不匹配。如何将具有不同值类型的数据框保存为 txt 文件?

默认值数据类型与列 DATES_DATE 的数据类型不匹配

具有混合数据类型的列的 groupby 数据

如何根据具有不同数据类型的两列中的条件创建新列?

pyspark 数据框:填充具有不同数据类型的选定列的值