Pandas 如何向csv文件添加分隔符

Pandas 如何向csv文件添加分隔符,pandas,csv,pyspark,delimiter,Pandas,Csv,Pyspark,Delimiter,我有一个没有分隔符的csv文件。是否可以在PySpark中的特定位置添加分隔符?像 我的文件看起来像: USDINRFUTCUR23Feb201700000000FF00000000000001990067895000000000NNN*12 USDINRFUTCUR24Feb201700000000FF00000000000001990067895000000000NNN*12 USDINRFUTCUR25Feb201700000000FF000000000000019900678950000

我有一个没有分隔符的csv文件。是否可以在PySpark中的特定位置添加分隔符?像

我的文件看起来像:

USDINRFUTCUR23Feb201700000000FF00000000000001990067895000000000NNN*12
USDINRFUTCUR24Feb201700000000FF00000000000001990067895000000000NNN*12
USDINRFUTCUR25Feb201700000000FF00000000000001990067895000000000NNN*12

对于固定宽度的文件,我希望在第3、第6、第12位使用分隔符


对于使用分布式pyspark解决方案,并没有类似的方法在您阅读时添加分隔符(因为有)。解决这个问题的一种可伸缩的方法是按一列中的原样读取数据,然后使用下面的代码(使用pyspark函数)创建列

创建示例数据帧:

from pyspark.sql import functions as F
from pyspark.sql.types import *

list=[['USDINRFUTCUR23Feb201700000000FF00000000000001990067895000000000NNN*12'],
      ['USDINRFUTCUR24Feb201700000000FF00000000000001990067895000000000NNN*12'],
      ['USDINRFUTCUR25Feb201700000000FF00000000000001990067895000000000NNN*12']]

df=spark.createDataFrame(list,['col1'])

df.show(truncate=False)


+---------------------------------------------------------------------+
|col1                                                                 |
+---------------------------------------------------------------------+
|USDINRFUTCUR23Feb201700000000FF00000000000001990067895000000000NNN*12|
|USDINRFUTCUR24Feb201700000000FF00000000000001990067895000000000NNN*12|
|USDINRFUTCUR25Feb201700000000FF00000000000001990067895000000000NNN*12|
+---------------------------------------------------------------------+
使用substrwith column创建新列,并删除第一列。您可以创建一个def(函数),该函数也可以读取和执行此代码,以便可以重用和简化管道

df.withColumn("Currency1", F.col("col1").substr(0,3))\
  .withColumn("Currency2", F.col("col1").substr(4,3))\
  .withColumn("Type", F.col("col1").substr(7,6))\
  .withColumn("Time", F.expr("""substr(col1,13,length(col1))"""))\
  .drop("col1").show(truncate=False)
  #output



+---------+---------+------+---------------------------------------------------------+
|Currency1|Currency2|Type  |Time                                                     |
+---------+---------+------+---------------------------------------------------------+
|USD      |INR      |FUTCUR|23Feb201700000000FF00000000000001990067895000000000NNN*12|
|USD      |INR      |FUTCUR|24Feb201700000000FF00000000000001990067895000000000NNN*12|
|USD      |INR      |FUTCUR|25Feb201700000000FF00000000000001990067895000000000NNN*12|
+---------+---------+------+---------------------------------------------------------+

不要在python中运行它并在那里插入分隔符。通过这条路径似乎更容易您想要pyspark解决方案,还是pandas解决方案就足够了?换句话说,您的dataone文件有多大?它是GB大小,我有84-90个文件。因此,文件大小是hugeI尝试过的,但是由于数据集太长,这需要很多时间。有没有pyspark函数可以做到这一点
df.withColumn("Currency1", F.col("col1").substr(0,3))\
  .withColumn("Currency2", F.col("col1").substr(4,3))\
  .withColumn("Type", F.col("col1").substr(7,6))\
  .withColumn("Time", F.expr("""substr(col1,13,length(col1))"""))\
  .drop("col1").show(truncate=False)
  #output



+---------+---------+------+---------------------------------------------------------+
|Currency1|Currency2|Type  |Time                                                     |
+---------+---------+------+---------------------------------------------------------+
|USD      |INR      |FUTCUR|23Feb201700000000FF00000000000001990067895000000000NNN*12|
|USD      |INR      |FUTCUR|24Feb201700000000FF00000000000001990067895000000000NNN*12|
|USD      |INR      |FUTCUR|25Feb201700000000FF00000000000001990067895000000000NNN*12|
+---------+---------+------+---------------------------------------------------------+