如何在pyspark中使用模式读取csv

时间:2019-09-26 15:17:53

标签: csv pyspark pyspark-dataframes

我知道如何使用pyspark读取csv,但是在以正确的格式加载csv时遇到很多问题。我的csv有3列,其中第一列和第二列是字符串,但第三列是字典列表。我无法加载最后一列。

我尝试过

schema = StructType([
    StructField("_id", StringType()),
    StructField("text", StringType()),
    StructField("links", ArrayType(elementType=MapType(StringType(), StringType())))
])

但是它引发了一个错误。使用Inferschema都行不通。

1 个答案:

答案 0 :(得分:0)

您需要拥有inferSchema="true"。如果它引起问题,则将所有内容读取为字符串,然后可以使用ast.literal_eval()包中的aststr转换为dict

您使用此功能:

def read_csv_spark(spark, file_path):

    """
    :param spark: SparkSession or SQLContext
    :param file_path: Path to the file
    :return: Spark Dataframe
    """
    df = (
        spark.read.format("com.databricks.spark.csv")
        .options(header="true", inferSchema="true")
        .load(file_path)
    )
    return df