【问题标题】:how to convert pipe delimited text file to csv file in pyspark?如何在pyspark中将管道分隔的文本文件转换为csv文件?
【发布时间】:2021-04-26 19:40:12
【问题描述】:

我正在从 hdfs 读取管道分隔的文本文件。我想将此文件存储为数据帧以进行进一步的 pyspark 数据帧相关操作。我能够从 hdfs 读取文件,现在我想知道如何将其转换为数据帧。有可能吗?

input=sc.textFile("hdfs://host/user/data/file1.txt") ## it is RDD 

如果第一种方法不可能,那么在第二种方法中,我想将此完整文件转换为 csv 格式,为此我想替换管道“|”用逗号“,”从每个地方开始,然后想将此文件存储为 csv,然后再转换为数据帧。请让我知道在 pyspark-2.2.0 中解决此问题的最佳方法。

【问题讨论】:

    标签: python pyspark


    【解决方案1】:
    input=sc.textFile("hdfs://host/user/data/file1.txt") ## it is RDD 
    

    您可以使用它来将 rdd 转换为 DataFrame。我们将“sc”作为 SparkContext

    toDF()

    input.toDF()
    

    您必须为此推断架构,并且必须使用“|”映射或拆分它,而不是。您可以导入 HiveContext,也可以使用定义为 SQLContext 的 sqlContext。通过使用,sqlContext spark 将为您指定的文件创建一个 DataFrame。

    # import
    from pyspark.sql import HiveContext
    sqlContext = HiveContext(sc)
    
    # Then, you can use the com.databricks.spark.csv.
    df = sqlContext.read \
         .format('com.databricks.spark.csv') \
         .options(header='true', delimiter='|') \
         .load('hdfs://host/user/data/file1.txt')
    

    第二种方法(转换为.csv后),你可以

    df = sqlContext.read \
         .format('com.databricks.spark.csv') \
         .options(header='true', delimiter=',') \ # you can use a ',' here
         .load('hdfs://host/user/data/file1.csv')
    
    • format():指定要读取文件的格式。
    • options():可以指定header,也可以指定delimiter。
    • load():加载给定路径的文件。

    更多信息,请参考:

    【讨论】:

    • Spark-csv 及其 com.databricks.spark.csv 自定义格式是 Spark 1.x 的临时创可贴解决方案;在 Spark 2 中,内置了 CSV 支持,如 .csv(somePath)
    • 如果要定义一组数字,可以使用 1、2、3... 或 1.0、2.0、3.0。这取决于方法和实现。
    【解决方案2】:

    df_with_schema = spark.read.format("csv")
    .options(header='true', delimiter='|')
    .schema(模式)
    .load("文件名.csv")

    使用选项而不是选项尝试它会起作用。同样适用于 sqlContext.read 也

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多