Spark with Scala中的BinaryType支持

时间:2017-08-27 21:44:34

标签: scala azure apache-spark pyspark

美好的一天!

我正在使用Microsoft Contoso BI Demo Dataset for Retail Industry数据库@ https://www.microsoft.com/en-us/download/confirmation.aspx?id=18279,我使用sqoop作为bzip2 csv文件提取到Azure Data Lake" \ t" -delimited

然后我使用Spark over Scala将这些文件转换为Parquet,如下所示:

Thread.CurrentPrincipal.Identity

但是,似乎因为BinaryType列Geometry我得到了异常:引起:java.lang.RuntimeException:不支持的类型:binary

虽然这在PySpark中完全正常。我是否缺少在Scala中设置/启用选项来处理带有二进制数据作为列之一的csv?

完全例外:

//-------DimGeography-------
    val schemaDimGeography=StructType(Array(StructField("GeographyKey",IntegerType,false),StructField("GeographyType",StringType,false),StructField("ContinentName",StringType,false),StructField("CityName",StringType,true),StructField("StateProvinceName",StringType,true),StructField("RegionCountryName",StringType,true),StructField("Geometry",BinaryType,true),StructField("ETLLoadID",IntegerType,true),StructField("LoadDate",TimestampType,true),StructField("UpdateDate",TimestampType,true)));
    val dfDimGeography= spark.
    read.format("com.databricks.spark.csv").
    option("header", "false").
    option("nullValue", "null").
    option("delimiter", "\t").
    schema(schemaDimGeography).
    load("adl://yvtazuredatalakestore.azuredatalakestore.net/clusters/yvthdisqoop/ContosoRetailDW/Full/Bzip2/DimGeography/*.bz2");
    //dfDimGeography.show();
    dfDimGeography.write.mode("overwrite").parquet("adl://yvtazuredatalakestore.azuredatalakestore.net/clusters/yvthdisqoop/ContosoRetailDW/Full/Parquet2/DimGeography/");

1 个答案:

答案 0 :(得分:1)

{p} BinaryType根本不支持csv数据源(Java,Scala,Python,R)。 The supported types are

ByteType | ShortType | IntegerType | LongType | FloatType |
DoubleType | BooleanType |DecimalType | TimestampType |
DateType | StringType

您必须手动解析此数据。