我知道如何使用pyspark读取csv,但是在以正确的格式加载csv时遇到很多问题。我的csv有3列,其中第一列和第二列是字符串,但第三列是字典列表。我无法加载最后一列。
我尝试过
schema = StructType([
StructField("_id", StringType()),
StructField("text", StringType()),
StructField("links", ArrayType(elementType=MapType(StringType(), StringType())))
])
但是它引发了一个错误。使用Inferschema都行不通。
答案 0 :(得分:0)
您需要拥有inferSchema="true"
。如果它引起问题,则将所有内容读取为字符串,然后可以使用ast.literal_eval()
包中的ast
将str
转换为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