【问题标题】:Adjusting incorrect data of a CSV file data in a Pyspark dataframe调整 Pyspark 数据框中 CSV 文件数据的不正确数据
【发布时间】:2021-04-02 18:57:50
【问题描述】:

我正在尝试将 CSV 文件读入 Pyspark 中的数据框,但我有一个包含混合数据的 CSV 文件。它的部分数据属于它的相邻列。有什么方法可以修改python中的数据框以按预期获取输出数据框。

CSV 示例

ID   , Name  
'1'  , 'Alice'
'2B' , 'ob'
'3Ri' , 'chard'

预期输出

ID, Name  
1, 'Alice'
2, 'Bob'
3, 'Richard' 

【问题讨论】:

  • 数据从何而来?有没有办法从源头上解决? 有什么方法可以修改python中的数据帧以按预期获得输出数据帧。这完全取决于格式。你有没有尝试过什么,做过什么研究?
  • 它是编码练习的一部分。我们的任务是清理数据并对其应用一些转换和操作。

标签: python pyspark pyspark-dataframes


【解决方案1】:

您可以通过使用来自pyspark.sql.functionsregexp_extract 来做到这一点。

我的方法是这样的:

#read with a different separator so df generated with a single column
df = spark.read.csv('filename',header=True,sep='|')

#renamed the column name with irr (to make it easy to call)
newcolnames=['irr']
for c,n in zip(df.columns,newcolnames):
    df=df.withColumnRenamed(c,n)

df.withColumn('ID',regexp_extract(df['irr'],r'(\d+)',1))
  .withColumn('Name',regexp_extract(df['irr'],'your_regex_pattern',0))
  .drop(df['irr']).show()

【讨论】:

  • 这真的给了我一个kisk-start。我添加了'[a-zA-Z\s,]+' 作为我的正则表达式模式。由于数据有额外的逗号,我使用dff.withColumn('Name', regexp_replace('Name', ',', '')) 删除它们。谢谢老兄。
  • 很高兴它有帮助。
猜你喜欢
  • 2020-05-08
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多