前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pyspark处理数据中带有列分隔符的数据集

Pyspark处理数据中带有列分隔符的数据集

作者头像
deephub
发布2021-01-25 10:40:29
4K0
发布2021-01-25 10:40:29
举报
文章被收录于专栏:DeepHub IMBA

本篇文章目标是处理在数据集中存在列分隔符或分隔符的特殊场景。对于Pyspark开发人员来说,处理这种类型的数据集有时是一件令人头疼的事情,但无论如何都必须处理它。

数据集基本上如下所示:

代码语言:javascript
复制
 #first line is the headerNAME|AGE|DEP
 Vivek|Chaudhary|32|BSC
 John|Morgan|30|BE
 Ashwin|Rao|30|BE

数据集包含三个列" Name ", " AGE ", " DEP ",用分隔符" | "分隔。如果我们关注数据集,它也包含' | '列名。

让我们看看如何进行下一步:

步骤1。使用spark的Read .csv()方法读取数据集:

代码语言:javascript
复制
 #create spark session 
 import pyspark
 from pyspark.sql import SparkSession
 spark=SparkSession.builder.appName(‘delimit’).getOrCreate()

上面的命令帮助我们连接到spark环境,并让我们使用spark.read.csv()读取数据集

代码语言:javascript
复制
 #create 
 df=spark.read.option(‘delimiter’,’|’).csv(r’<path>/delimit_data.txt’,inferSchema=True,header=True)
 df.show()

从文件中读取数据并将数据放入内存后我们发现,最后一列数据在哪里,列年龄必须有一个整数数据类型,但是我们看到了一些其他的东西。这不是我们所期望的。一团糟,完全不匹配,不是吗?答案是肯定的,确实一团糟。

现在,让我们来学习如何解决这个问题。

步骤2。再次读取数据,但这次使用Read .text()方法:

代码语言:javascript
复制
 df=spark.read.text(r’/Python_Pyspark_Corp_Training/delimit_data.txt’)
 df.show(truncate=0)
代码语言:javascript
复制
 #extract first row as this is our header
 head=df.first()[0]
 schema=[‘fname’,’lname’,’age’,’dep’]
 print(schema)
 Output: ['fname', 'lname', 'age', 'dep']

下一步是根据列分隔符对数据集进行分割:

代码语言:javascript
复制
 #filter the header, separate the columns and apply the schema
 df_new=df.filter(df[‘value’]!=head).rdd.map(lambda x:x[0].split(‘|’)).toDF(schema)
 df_new.show()

现在,我们已经成功分离出列。

我们已经成功地将“|”分隔的列(“name”)数据分成两列。现在,数据更加干净,可以轻松地使用。

接下来,连接列“fname”和“lname”:

代码语言:javascript
复制
 from pyspark.sql.functions import concat, col, lit
 df1=df_new.withColumn(‘fullname’,concat(col(‘fname’),lit(“|”),col(‘lname’)))
 df1.show()

要验证数据转换,我们将把转换后的数据集写入CSV文件,然后使用read. CSV()方法读取它。

代码语言:javascript
复制
 df1.write.option(‘sep’,’|’).mode(‘overwrite’).option(‘header’,’true’).csv(r’<file_path>\cust_sep.csv’)

下一步是数据验证:

代码语言:javascript
复制
 df=spark.read.option(‘delimiter’,’|’).csv(r<filepath>,inferSchema=True,header=True)
 df.show()

现在的数据看起来像我们想要的那样。

作者:Vivek Chaudhary

原文地址:https://medium.com/towards-artificial-intelligence/pyspark-handle-dataset-with-columns-separator-in-data-c98069d131aa

deephub翻译组

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档