python - 读取 csv 中带有逗号和引号的字段,其中逗号是分隔符 - pyspark

标签 python apache-spark pyspark

我的输入 csv 文件中有一条记录,

"2017-11-01","2017-10-29","2017-11-04","4532491","","","","Natural States: "The Environmental Imagination" in Maine, Oregon, and the Nation","1000","Richard W. Judd"

当我在 pyspark 中阅读此 csv 时,字段“自然状态:缅因州、俄勒冈州和国家的“环境想象力”” 被分隔为单独的列。

>>> df = spark.read.csv('file.csv')
>>> df.show(truncate=False)
+----------+----------+----------+----------+----+----+----+---------------------------------------------------------+-------+----------------+----+---------------+
|_c0       |_c1       |_c2       |_c3       |_c4 |_c5 |_c6 |_c7                                                      |_c8    |_c9             |_c10|_c11           |
+----------+----------+----------+----------+----+----+----+---------------------------------------------------------+-------+----------------+----+---------------+
|2017-11-01|2017-10-29|2017-11-04| 4532491  |null|null|null|Natural States: "The Environmental Imagination" in Maine | Oregon| and the Nation |1000|Richard W. Judd|
+----------+----------+----------+----------+----+----+----+---------------------------------------------------------+-------+----------------+----+---------------+

除了更改输入文件中的分隔符之外的任何解决方法,因为我们无法更改输入文件。

最佳答案

您可以使用sparkContext读取文件并使用多个字符分割作为“,”,然后转换rdddataframe 如下

rdd = sc.textFile("file.csv")

def replaceFunc(words):
    result = []
    for word in words.split("\",\""):
        result.append(word.replace("\"", ""))
    return result

rdd.map(replaceFunc).toDF().show(1, False)

您应该有以下输出

+----------+----------+----------+-------+---+---+---+------------------------------------------------------------------------------+----+---------------+
|_1        |_2        |_3        |_4     |_5 |_6 |_7 |_8                                                                            |_9  |_10            |
+----------+----------+----------+-------+---+---+---+------------------------------------------------------------------------------+----+---------------+
|2017-11-01|2017-10-29|2017-11-04|4532491|   |   |   |Natural States: The Environmental Imagination in Maine, Oregon, and the Nation|1000|Richard W. Judd|
+----------+----------+----------+-------+---+---+---+------------------------------------------------------------------------------+----+---------------+

关于python - 读取 csv 中带有逗号和引号的字段,其中逗号是分隔符 - pyspark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48435479/

相关文章:

python - 与 MEMORY 的 OBJECTS numpy 数组相比,列表列表的优点/缺点是什么?

python - 如何以表格形式打印多个对象的参数?

python - 无法通过使用相同参数运行单个模型来重现 GridSearchCV/RandomizedSearchCV 的结果

apache-spark - 使用 Faker 和 PySpark Dataframe 匿名数据

python - 随机森林分类器 - 将索引标签标记转换回字符串值

Python boto3 从禁用备份的快照创建 rds 实例

apache-spark - 使用 saveAsTextFile 时,为什么在 Google Dataproc 中运行的 Spark 将临时文件存储在外部存储 (GCS) 而不是本地磁盘或 HDFS 上?

java - 数组中的 2 个值到我的 DataFrame 中的 2 列

machine-learning - 如何在 Pyspark 中获得直线线性回归结果?

azure - 如何将保留历史记录(时间戳和版本)的 Databricks 表复制到新订阅中的另一个 Databricks?