python - 如何防止 pyspark 将逗号解释为以 JSON 对象为值的 csv 字段中的分隔符
问题描述
我正在尝试使用 pyspark 版本 2.4.5 和 Databrick 的 spark-csv 模块读取逗号分隔的 csv 文件。csv 文件中的一个字段具有一个 json 对象作为其值。csv的内容如下
测试.csv
header_col_1, header_col_2, header_col_3
one, two, three
one, {“key1”:“value1",“key2”:“value2",“key3”:“value3”,“key4”:“value4"}, three
我发现的其他解决方案已读取定义为"escape": '"'和'delimiter': "," 的选项。这似乎不起作用,因为相关字段中的逗号没有用双引号括起来。下面是我用来读取 csv 文件的源代码
测试.py
from pyspark.sql import SparkSession
import findspark
findspark.init()
spark = SparkSession.builder.appName('test').getOrCreate()
read_options = {
'header': 'true',
"escape": '"',
'delimiter': ",",
'inferSchema': 'false',
}
spark_df = spark.read.format('com.databricks.spark.csv').options(**read_options).load('test.csv')
print(spark_df.show())
上述程序的输出如下图
+------------+-----------------+---------------+
|header_col_1| header_col_2| header_col_3|
+------------+-----------------+---------------+
| one| two| three|
| one| {“key1”:“value1"|“key2”:“value2"|
+------------+-----------------+---------------+
解决方案
在 CSV 文件中,您必须将 JSON 字符串放在双引号中。JSON 字符串中的双引号必须用反斜杠 (\") 进行转义。删除您的转义选项,因为它不正确。默认情况下,分隔符设置为 ",",转义字符设置为 '\',引号字符设置为 ' “”。请参阅Databricks 文档
推荐阅读
- python - python中的后台无限循环
- php - 如何将 jSignature 与 php 集成
- javascript - 如何继承这个javascript函数?
- scala - 链接 Scala 嵌套期货
- reactjs - 如何在每次单击时更改状态?
- python - 使用 Pycharm“在 python 控制台中运行”时如何进行相对导入?
- java - 无法替换阿拉伯字符
- c++ - 如何将整数转换为常量 void 指针?
- android - 为下载/文档文件夹中的文件类型/扩展注册 Android 应用程序
- python - Python 3 numpy 对矩阵使用整数除法,对向量使用正则除法?