如何处理 CSV 文件,其中地址列数据由逗号分隔为单列而不是 Spark 中的多列
How to handle CSV file where address column data's are seperated by comma as a single column instead of multiple column in Spark
如果 CSV 文件中地址字段的传入数据由逗号 (',') 分隔,我该如何在 Spark 中处理它?
如果我想将该数据记录到我的地址栏中。
示例-假设我有如下 CSV 文件形式的输入数据,
Bob,Delhi,NCR,8984124789
Scott,Bangalore,Karnataka,9040788301
Robert,Andheri,Mumbai,Maharastra,9338075922
我想要最终数据框,
Name Address MobileNo
Bob Delhi,NCR 8984124789
Scott Bangalore,Karnataka 9040788301
Robert Andheri,Mumbai,Maharastra 9338075922
我们如何在 Spark 中处理这个问题?
您可以使用 RDD 清理数据,然后再从中创建数据框:
rdd = sc.textFile('path-to-csv.csv')
然后通过移动最后一列来清理它,以便将 Address
数据隔离到行尾:
df = rdd.map(lambda l: l.split(','))\
.map(lambda l: Row(Name=l[0],Mobile=l[-1],Address=', '.join(l[1:-1])))\
.toDF()
并显式设置模式:
df = rdd.map(lambda l: l.split(','))\
.map(lambda l: Row(Name=l[0],MobileNo=l[-1],Address=', '.join(l[1:-1])))\
.toDF(schema=StructType(fields=[StructField('Name',StringType()),
StructField('Address', StringType()),
StructField('MobileNo', StringType())]))
结果:
+------+---------------------------+----------+
|Name |Address |MobileNo |
+------+---------------------------+----------+
|Bob |Delhi, NCR |8984124789|
|Scott |Bangalore, Karnataka |9040788301|
|Robert|Andheri, Mumbai, Maharastra|9338075922|
+------+---------------------------+----------+
如果 CSV 文件中地址字段的传入数据由逗号 (',') 分隔,我该如何在 Spark 中处理它? 如果我想将该数据记录到我的地址栏中。
示例-假设我有如下 CSV 文件形式的输入数据,
Bob,Delhi,NCR,8984124789
Scott,Bangalore,Karnataka,9040788301
Robert,Andheri,Mumbai,Maharastra,9338075922
我想要最终数据框,
Name Address MobileNo
Bob Delhi,NCR 8984124789
Scott Bangalore,Karnataka 9040788301
Robert Andheri,Mumbai,Maharastra 9338075922
我们如何在 Spark 中处理这个问题?
您可以使用 RDD 清理数据,然后再从中创建数据框:
rdd = sc.textFile('path-to-csv.csv')
然后通过移动最后一列来清理它,以便将 Address
数据隔离到行尾:
df = rdd.map(lambda l: l.split(','))\
.map(lambda l: Row(Name=l[0],Mobile=l[-1],Address=', '.join(l[1:-1])))\
.toDF()
并显式设置模式:
df = rdd.map(lambda l: l.split(','))\
.map(lambda l: Row(Name=l[0],MobileNo=l[-1],Address=', '.join(l[1:-1])))\
.toDF(schema=StructType(fields=[StructField('Name',StringType()),
StructField('Address', StringType()),
StructField('MobileNo', StringType())]))
结果:
+------+---------------------------+----------+
|Name |Address |MobileNo |
+------+---------------------------+----------+
|Bob |Delhi, NCR |8984124789|
|Scott |Bangalore, Karnataka |9040788301|
|Robert|Andheri, Mumbai, Maharastra|9338075922|
+------+---------------------------+----------+