2024-04-27 04:53:29 发布
网友
我有一个csv文件,它没有头,因为这一点,当我将它转换为spark dataframe时,会收到警告,说“csv头不符合模式”
,a,b 1,x,y 2,x,y 3,x,y <-- table looks like this (,a,b --> are header).
所以我想忽略初始列标题,得到正确的模式。P.S:如果我用任何标题命名初始列,我将得到正确的模式
这些数字看起来像一个索引,因此您应该使用index_col参数将它们视为一个索引
将pandas df转换为spark df:https://stackoverflow.com/a/54709925/11971785
import pandas as pd import findspark findspark.init() import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() df_pandas = pd.read_csv(r"...\your_csv.csv", index_col = 0) df_spark = spark.createDataFrame(df_pandas) spark_df.createOrReplaceTempView('df_spark')
或者,您可以删除第一行并明确指定标题,如下所示:
df_spark = spark.read.format("csv")\ .option("header", "false")\ .schema(schema=['x', 'a', 'b'])\ .load("...\PATH_to_your_csv")
要动态创建此明确指定的标题列表,可以尝试以下操作:
lst_columns = list(spark.textFile("...\PATH_to_your_csv")\ .mapPartitions(lambda line: csv.reader(line,delimiter=',', quotechar='"'))\ .filter(lambda line: len(line)==0).toPandas().iloc[0])
因此,如果我理解正确,基本上你需要重命名列名,要做到这一点,请使用下面的
df = df.withColumnRenamed('old_column', 'new_column') df.show()
这些数字看起来像一个索引,因此您应该使用index_col参数将它们视为一个索引
将pandas df转换为spark df:https://stackoverflow.com/a/54709925/11971785
或者,您可以删除第一行并明确指定标题,如下所示:
要动态创建此明确指定的标题列表,可以尝试以下操作:
因此,如果我理解正确,基本上你需要重命名列名,要做到这一点,请使用下面的
相关问题 更多 >
编程相关推荐