无法从HDP3中超过25列的sparkDataframe加载配置单元表

wfauudbj  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(359)

我们试图从spark shell填充配置单元表。使用配置单元仓库连接器成功地将包含25列的Dataframe添加到配置单元表中。但超过这个极限,我们得到以下误差:

Caused by: java.lang.IllegalArgumentException: Missing required char ':' at 'struct<_c0:string,_c1:string,_c2:string,_c3:string,_c4:string,_c5:string,_c6:string,_c7:string,_c8:string,_c9:string,_c10:string,_c11:string,_c12:string,_c13:string,_c14:string,_c15:string,_c16:string,_c17:string,_c18:string,_c19:string,_c20:string,_c21:string,_c22:string,_c23:string,...^ 2 more fields>'
  at org.apache.orc.TypeDescription.requireChar(TypeDescription.java:293)

下面是示例输入文件数据(输入文件类型为csv)。

|col1                |col2 |col3 |col4               |col5    |col6           |col7       |col8    |col9    |col10   |col11   |col12   |col13   |col14   |col15   |col16 |col17|col18                                        |col19   |col20  |col21    |col22    |col23    |col24                               |col25|col26     |
|--------------------|-----|-----|-------------------|--------|---------------|-----------|--------|--------|--------|--------|--------|--------|--------|--------|------|-----|---------------------------------------------|--------|-------|---------|---------|---------|------------------------------------|-----|----------|
|11111100000000000000|CID81|DID72|2015-08-31 00:17:00|null_val|919122222222222|1627298243 |null_val|null_val|null_val|null_val|null_val|null_val|Download|null_val|Mobile|NA   |x-nid:xyz<-ch-nid->N4444.245881.ABC-119490111|12452524|1586949|sometext |sometext |sometext1|8b8d94af-5407-42fa-9c4f-baaa618377c8|Click|2015-08-31|
|22222200000000000000|CID82|DID73|2015-08-31 00:57:00|null_val|919122222222222|73171145211|null_val|null_val|null_val|null_val|null_val|null_val|Download|null_val|Tablet|NA   |x-nid:xyz<-ch-nid->N4444.245881.ABC-119490111|12452530|1586956|88200211 |88200211 |sometext2|9b04580d-1669-4eb3-a5b0-4d9cec422f93|Click|2015-08-31|
|33333300000000000000|CID83|DID74|2015-08-31 00:17:00|null_val|919122222222222|73171145211|null_val|null_val|null_val|null_val|null_val|null_val|Download|null_val|Laptop|NA   |x-nid:xyz<-ch-nid->N4444.245881.ABC-119490111|12452533|1586952|sometext2|sometext2|sometext3|3ab8511d-6f85-4e1f-8b11-a1d9b159f22f|Click|2015-08-31|

spark shell是使用以下命令示例化的:

spark-shell --jars /usr/hdp/current/hive_warehouse_connector/hive-warehouse-connector-assembly-1.0.0.3.0.1.0-187.jar --conf spark.hadoop.metastore.catalog.default=hive --conf spark.sql.hive.hiveserver2.jdbc.url="jdbc:hive2://sandbox-hdp.hortonworks.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;user=raj_ops"

hdp的版本是3.0.1
配置单元表是使用以下命令创建的:

val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(spark).build()

hive.createTable("tablename").ifNotExists().column()...create()

使用以下命令保存数据:

df.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").option("table", "tablename").mode("append").save()

请帮助我们。
先谢谢你。

c9qzyr3d

c9qzyr3d1#

在彻底检查了以下类的源代码之后,我遇到了这个问题:
org.apache.orc.typedescription类型描述
org.apache.spark.sql.types.structtype结构类型
org.apache.spark.util.utils文件
我发现罪魁祸首是变量 DEFAULT_MAX_TO_STRING_FIELDS 在班里 org.apache.spark.util.Utils :
/* The performance overhead of creating and logging strings for wide schemas can be large. To limit the impact, we bound the number of fields to include by default. This can be overridden by setting the 'spark.debug.maxToStringFields' conf in SparkEnv. */ val DEFAULT_MAX_TO_STRING_FIELDS = 25 因此,在设置这个属性之后,通过示例:conf.set(“spark.debug.maxtostringfields”,“128”);在我的申请中,问题已经解决了。
我希望它能帮助别人。

相关问题