猿问

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

我在 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 


慕尼黑5688855
浏览 233回答 2
2回答

万千封印

你的代码就快到了。假设您的架构如下:df.printSchema()#root# |-- word_verb: struct (nullable = true)# |&nbsp; &nbsp; |-- _1: string (nullable = true)# |&nbsp; &nbsp; |-- _2: string (nullable = true)# |-- word_noun: struct (nullable = true)# |&nbsp; &nbsp; |-- _1: string (nullable = true)# |&nbsp; &nbsp; |-- _2: string (nullable = true)您只需要访问_1每一列的字段值:import pyspark.sql.functions as Fdf.withColumn(&nbsp; &nbsp; "word_chunk_final",&nbsp;&nbsp; &nbsp; F.concat_ws(' ', F.col('word_verb')['_1'], F.col('word_noun')['_1'])).show()#+-----------------+------------+----------------+#|&nbsp; &nbsp; &nbsp; &nbsp; word_verb|&nbsp; &nbsp;word_noun|word_chunk_final|#+-----------------+------------+----------------+#|&nbsp; &nbsp; &nbsp; &nbsp; [cook,VB]|[chicken,NN]|&nbsp; &nbsp; cook chicken|#|&nbsp; &nbsp; &nbsp; &nbsp;[pack,VBN]|&nbsp; [lunch,NN]|&nbsp; &nbsp; &nbsp; pack lunch|#|[reconnected,VBN]|&nbsp; &nbsp;[wifi,NN]|reconnected wifi|#+-----------------+------------+----------------+此外,您应该使用concat_ws("concatenate with separator") 而不是concat将字符串添加在一起,并在它们之间留一个空格。它类似于str.join在 python 中的工作方式。
随时随地看视频慕课网APP

相关分类

Python
我要回答