我正在尝试加载一些JSON文件'使用spark-shell和Scala为HIVE提供数据。
import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext
val conf = new SparkConf().setAppName("App").setMaster("local")
import org.apache.spark.sql.hive._
val hiveContext = new HiveContext(sc)
val df = hiveContext.read.schema(buildSchema()).json(<path to json>)
df.printSchema()
df.show()
df.write.mode("append").saveAsTable("data")
问题是我的json文件中的一些字段是字符串数组。如果任何给定文件甚至具有带有一些有效值的字符串数组字段的一个记录,则结果数据帧具有所述字段的正确数据类型(即字符串数组)但是如果给定json文件中的所有记录都为空在字符串数组字段中的值,然后记录在数据框中写为字符串类型。当最终数据必须从数据帧附加到HIVE表时,由于数据类型不匹配,记录将被拒绝。 如何确保避免这种数据类型不匹配,无论上述字段中是否有任何值,它的数据类型都被读作字符串数组(如果数组为空,可能为空值)?
答案 0 :(得分:0)
尝试下面的代码,我正在转向Array[String]
并为我的示例数据工作。
df.select(df("Your_Column_Name").cast(ArrayType(StringType))).write.mode("append").saveAsTable("data")