我有一个CSV文件,我用PySpark在Databricks中读取了代码:
df =spark.read.options(delimiter='|',header=True ,multiLine=True).schema(schema).csv('/mnt/file.csv')
我正在阅读多个文件顺序所有CSV与分隔符|
。
问题是我的文件中的一个字段有多个|这显然会使所有的dataframe都出错(我甚至不能保存它,因为Timestamp字段被一个String字段填充)。
我不知道在哪个文件中会发生这种情况,在哪个字段中,我没有任何引用(例如"
)可以使用。我甚至不能在文件中修改它,因为我有超过1000个文件,其中一些超过10 GB。
我能找到解决这个问题的变通方法吗?
我试着这样做:
df =spark.read.options(delimiter=',',header=True, multiLine=True, inferSchema=True).csv('/mnt/file.csv')
df.withColumn('header|in|one|row', regexp_replace('header|in|one|row', 'text||||text2', 'text text2'))
但它不起作用('文本||||text2'这是一个错误让我看到的例子)
2条答案
按热度按时间h79rfbju1#
您可以定义文件的
schema
,并使用header True
读取文件并传递模式。在这种情况下,spark将读取头并将模式添加到dataframe。
Example:
py49o6xq2#
|
分隔符的文件,其中一个字段的值具有连续的|
字符。我使用文本格式读取了文件,以下是dataframe结果:function, I was able to replace any trace of multiple
|“人物。下面是我使用的代码:|
,并获得适当的结果:|
字符时,此操作才有效。如果值中只有一个随机|
,则无法将其与分隔符区分开。|
字符时,这才有效。如果是这种情况,则这些附加字符与实际的列分隔符混合,因此不能解决问题。这是解决特定情况的一种可能方法。