如何处理 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|
+------+---------------------------+----------+