Неверные поля Scark DataFrame

Я написал следующий код как в scala & python, но возвращаемый DataFrame, похоже, не применил поля, которые не являются нулевыми, в моей схеме, которую я применяю. italianVotes.csv – это файл csv с ‘~’ как разделитель и четыре поля. Я использую искру 2.1.0 .

italianVotes.csv

 2657~135~2~2013-11-22 00:00:00.0 2658~142~2~2013-11-22 00:00:00.0 2659~142~1~2013-11-22 00:00:00.0 2660~140~2~2013-11-22 00:00:00.0 2661~140~1~2013-11-22 00:00:00.0 2662~1354~2~2013-11-22 00:00:00.0 2663~1356~2~2013-11-22 00:00:00.0 2664~1353~2~2013-11-22 00:00:00.0 2665~1351~2~2013-11-22 00:00:00.0 2667~1357~2~2013-11-22 00:00:00.0 

Скала

 import org.apache.spark.sql.types._ val schema = StructType( StructField("id", IntegerType, false) :: StructField("postId", IntegerType, false) :: StructField("voteType", IntegerType, true) :: StructField("time", TimestampType, true) :: Nil) val fileName = "italianVotes.csv" val italianDF = spark.read.schema(schema).option("sep", "~").csv(fileName) italianDF.printSchema() // output root |-- id: integer (nullable = true) |-- postId: integer (nullable = true) |-- voteType: integer (nullable = true) |-- time: timestamp (nullable = true) 

питон

 from pyspark.sql.types import * schema = StructType([ StructField("id", IntegerType(), False), StructField("postId", IntegerType(), False), StructField("voteType", IntegerType(), True), StructField("time", TimestampType(), True), ]) file_name = "italianVotes.csv" italian_df = spark.read.csv(file_name, schema = schema, sep = "~") # print schema italian_df.printSchema() # output root |-- id: integer (nullable = true) |-- postId: integer (nullable = true) |-- voteType: integer (nullable = true) |-- time: timestamp (nullable = true) 

Мой главный вопрос: почему первые два поля имеют значение NULL, когда я установил их в значение, не равное нулю в моей схеме?

В общем, Spark Datasets либо наследуют свойство nullable от своих родителей, либо выводятся на основе внешних типов данных.

Вы можете утверждать, что это хороший подход или нет, но в конечном итоге это разумно. Если семантика источника данных не поддерживает ограничения на значение NULL, то применение схемы также не может. В конце концов, всегда лучше предположить, что вещи могут быть null , чем неудачными во время выполнения, если это противоположное предположение оказывается неправильным.

  • Запрос Spark SQL DataFrame со сложными типами
  • spark.ml StringIndexer бросает «Невидимый ярлык» на fit ()
  • Как найти размер вспышки RDD / Dataframe?
  • Вызывается: java.lang.NullPointerException в org.apache.spark.sql.Dataset
  • Apache Spark, как добавить новый столбец из списка / массива в Spark dataframe
  • Как передать дополнительные параметры UDF в SparkSql?
  • Как закрепить два (или более) DataFrame в Spark
  • Определение UDF, который принимает массив объектов в Spark DataFrame?
  • Перезаписывать конкретные разделы в методе записи данных в режиме искривления
  • Каковы возможные причины для получения TimeoutException: фьючерсы, истекающие после при работе с Spark
  • Давайте будем гением компьютера.