【问题标题】:Databricks parquet conversionDatabricks 拼花转换
【发布时间】:2017-12-30 11:15:14
【问题描述】:

我正在使用数据块进行镶木地板转换。该文件是 ^A 分隔的。我在创建 DF 时明确提到了这一点,如下所示。但是,当我在数据中得到一个 ^M 字符时,它会在那里终止并给出格式错误的行异常。有人可以建议我如何处理这个问题吗?

记录中的样本部分
Rollout^Asome text 来了;^M ^M Rewards:somemore text;^A0.00

val dataframe = sparkSession.sqlContext.read
                    .format("com.databricks.spark.csv")
                    .option("delimiter", "\U0001")
                    .option("header", "false")
                    .option("mode","FAILFAST")
                    .option("treatEmptyValuesAsNulls","true")
                    .option("nullValue"," ")
                    .option("quote","")
                    .option("ignoreLeadingWhiteSpace", "true")
                    .option("ignoreTrailingWhiteSpace", "true")
                    .schema(schema)
                    .load(fileLocation)

错误 FAILFAST 模式下的错误行:Rollout^Asome text come here;

【问题讨论】:

    标签: scala apache-spark parquet databricks


    【解决方案1】:

    您也可以使用sparkContext 获取dataframe,如下所示

    val dataframe = sparkSession.sparkContext.textFile(fileLocation).map(line => line.split("\\^A")).map(array => (array(0).trim, array(1).trim, array(2).trim)).toDF
    
    dataframe.show(false)
    

    输出是

    +-------+-------------------------------------------------+----+
    |_1     |_2                                               |_3  |
    +-------+-------------------------------------------------+----+
    |Rollout|some text comes here;^M ^M Rewards:somemore text;|0.00|
    +-------+-------------------------------------------------+----+
    

    更新

    你已经评论了

    但我们正在构建一个可处理 1000 多个表格的通用框架,我们正在寻找更通用的解决方案

    为此,您可以创建架构使用该架构来创建数据框。我试图尽可能多地通用

    //read the file
    val rdd = sc.textFile(fileLocation).map(line => line.split("\\^A"))
    //create schema
    val schema = StructType(rdd.first().indices.map(x => StructField("col_"+(x+1), StringType)))
    
    //create dataframe
    sqlContext.createDataFrame(rdd.map(Row.fromSeq(_)), schema).show(false)
    

    这应该给你

    +-------+-------------------------------------------------+-----+
    |col_1  |col_2                                            |col_3|
    +-------+-------------------------------------------------+-----+
    |Rollout|some text comes here;^M ^M Rewards:somemore text;|0.00 |
    +-------+-------------------------------------------------+-----+
    

    所以现在列号取决于你在数据中有多少^A

    希望回答对你有帮助

    【讨论】:

    • 感谢您的回复但是我们正在构建一个通用框架来处理 1000 多个表格,我们正在寻找更通用的解决方案
    • @user8062565,我已经更新了我的答案。我希望这次我回答正确;)我花了 1 年时间才弄明白:)
    猜你喜欢
    • 2021-03-22
    • 2023-03-20
    • 2018-06-19
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多