您可以手動指定模式,例如,從(https://github.com/databricks/spark-csv):
進口org.apache.spark.sql。SQLContext org.apache.spark.sql.types進口。{StructType, StructField, StringType IntegerType};val sqlContext = new sqlContext (sc) val customSchema = StructType(數組(StructField(“年”,IntegerType,真的),StructField(“製造”,StringType,真),StructField(“模式”,StringType,真的),StructField(“評論”,StringType,真的),StructField(“空白”,StringType,真)))
val df = sqlContext。讀.format (com.databricks.spark.csv) .option(“標題”、“true”) / /使用所有文件的第一行標題. schema (customSchema) .load (“cars.csv”)
val selectedData = df。選擇selectedData(“年”、“模型”)。寫.format (com.databricks.spark.csv) .option .save(“標題”、“true”) (“newcars.csv”)
我解決同樣的問題,我想所有的列作為文本和正確處理之後,我已經解決了通過重鑄所有列字符串後我推斷的模式。我不確定它是有效的,但它的工作原理。
# = ' pyspark路徑…' df =火花。讀\ .option (“inferschema”,“真正的”)\ . csv (df)df的列。列:df = df.withColumn(列,df(列).cast('字符串'))
然後你再讀模式改變了f = spark.read。選項(“模式”,df.schema) . csv (df)
這個但是不處理嵌套列,雖然csv不創建任何嵌套的結構體,我希望。