大數據路上的bug坑

1、[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5:compile (default-compile) on project easyml-manage: Compilation failure: Compilation failure: 
[ERROR] /D:/gyl/gitee/EasyMl/easyml-manage/src/main/java/com/trusfort/easyml/controller/interceptor/StartupListener.java:[3,40] 找不到符號
[ERROR]   符號:   類 JobService
[ERROR]   位置: 程序包 com.trusfort.easyml.service.task
[ERROR] /D:/gyl/gitee/EasyMl/easyml-manage/src/main/java/com/trusfort/easyml/controller/interceptor/StartupListener.java:[22,5] 找不到符號
[ERROR]   符號:   類 JobService
[ERROR]   位置: 類 com.trusfort.easyml.controller.interceptor.StartupListener
[ERROR] -> [Help 1]

解決方案:找到項目中JobService類的位置,右鍵該類,點擊Recompile即可。


2、

這是因爲scala程序的主類是這樣聲明的:
	Class Demo {
	def main(args : Array[String]) {
}
}
要把它改成這樣:


3、下面的bug是因爲沒有寫這句話:

       Import org.apache.spark.sql.types._


4、spark中textFile讀取txt文件時,txt文件內容行數與讀取出來進行count後的行數與內容行數不一致。

(1)txt文件最後沒有空行,總共有150行

(2)txt文件最後有空行,spark中textFile讀取了151行

再看看數據,最後一個空行被toDF操作轉換爲[]


5、spark的dataframe中withColumn裏函數不要寫成這樣col(“features”).apply(convertUDF),會出問題(這裏的apply的用法不同)

要寫成下面這樣就沒問題


6、Idea中JDK爲1.8,還提示Diamond types are not supported at this language level。

解決方法:通過查看項目設置,發現project的java level 也是8。

然後繼續檢查其他模塊 如modules ,發現了問題所在

將其改爲8就可以了。


7、一個非常簡單的程序,出現了一個這樣的錯誤:

解決辦法:

(1)

  1. 網上說是hdfs目錄下有相關的hadoop jar包,刪掉就能用,試了一下,並沒有用。
  2. 網上說是jar包衝突,刪除本地guava庫(這種解決方法是存在多個版本guava庫的時候,而我這裏只有一個版本,並且我也沒有進行hbase查詢,所以並沒有用)。
  3. 真正的答案,導致錯誤的原因的確是guava包的問題。查看pom.xml文件,發現自己並沒有寫guava的依賴,所以應該是別的地方引用到了。然後去idea的依賴包管理界面external Libraries查看存在版本爲19.0的guava包,導致這個錯誤的原因就是版本19.0的guava包和spark不兼容,於是在pom.xml文件中添加以下依賴:
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>15.0</version>
</dependency>

          等依賴加載完後,能看到external Libraries裏guava包的版本變爲15.0,再次運行,發現不會報錯了。


8、錯誤:

Unable to instantiate SparkSession with Hive support because Hive classes are not found.

解決方法:在pom.xml文件中添加依賴:

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.11</artifactId>
      <version>${spark.version}</version>
</dependency>

9、在對dataframe的每列計算統計特徵時,報如下錯誤:

錯誤原因:scala中“$”後面接一個變量名以提取變量值,而這裏columnName(0)的值是字符串。

解決方案:將”$”去掉也沒用,因爲將“$”去掉後,在雙引號裏面的columnName(0)就表示一個字符串,而不是”x”。最後的解決方法是分別定義,然後用”$”引用。


10、關於spark.sql中字符串前面s的問題,如果不加s,則會報錯:無法解析變量

解決方法:在字符串前面加個s(具體可以看看scala中字符串插值)


11、mysql中第一次修改密碼出現的問題:

出現該錯誤的原因是root@localhost加了單引號,將該單引號去掉就ok,即:ALTER USER root@localhost IDENTIFIED  BY '1234'; 。(注意:最後的分號一定要有)


12、sql問題:出現這個問題的主要原因是$str中的值與data1和data2的列不一樣,在str中數據表是aa和bb,而實際給的是data1和data2.這說明sql中別名和原始名是不等價的。

解決方法:爲表加別名。


13、scala中vector和spark中vector的問題:

問題背景:看代碼時發現toArray帶了參數,而實際spark的API中Vector.toArray是不帶參數的,如下圖,竟然沒有報錯:

然後自己敲了一下,發現toArray帶了參數報錯,如下圖,爲什麼會這樣?

然後,在變量m處按快捷鍵Alt+Enter查看變量類型,如下圖,有兩種類型,無論選哪種類型,帶參數的toArray都會報錯。

               類型1:Seq[Int]

               類型2:scala.Vector[Int]

然後,點擊Vector發現該Vector並不是import進來的Vector,如下圖

於是,直接用org.apache.spark.ml.linalg.Vector定義一個Vector變量,如下圖

爲什麼直接把包名帶上定義的變量b是Vector型,而變量m是Seq[Int]或scala.Vector[Int]?

這是因爲變量m裏的Vector實際是scala中的容器,並不是spark中的vector。在m.toArray(1)上按Ctrl+鼠標點擊toArray也可以看出該toArray函數是容器中的函數,如下圖

從上面可以看出,即使將spark中Vector給import進來,但是直接寫vector還是調用的scala中的容器vector。

到這裏,問題還沒解決,就是實際spark的API中Vector.toArray是不帶參數的,這裏帶參數爲啥不報錯?

原因如下:

在上圖toArray處按快捷鍵Ctrl+鼠標點擊可以看到,Spark中vector的toArray方法是繼承scala.Array,而scala.Array是可以帶參數的,如下:

到這裏,說明一個問題,就是spark中vector的toArray方法是可以帶參數的,參數表示元素的索引,scala中vector容器的toArray方法不能帶參數。


14、windows中cmd裏運行start-dfs.cmd啓動hadoop,報錯:

找不到或無法加載主類 org.apache.hadoop.hdfs.server.namenode.NameNode

解決方法:按照網上解決方法查了一下hadoop-env.cmd文件並修改,發現根本不是hadoop-env.cmd的問題。束手無策時,考慮到開始安裝hadoop時對各種文件配置完全不懂,就是按照網上教程胡配一通的,所以就刪除了已安裝好的hadoop,重新安裝hadoop文件並進行配置(具體配置方法看廈門大數據實驗室的配置教程即可),然後就有了第15個問題。


15、(1)windows中cmd裏運行start-dfs.cmd啓動hadoop,報錯:

(2)idea中運行程序報錯:

出現以上問題的原因是hadoop缺乏在windows上運行的必要組件,像winutils.exe等,這些組件的下載地址https://github.com/steveloughran/winutils,從winutils-master\hadoop-2.7.1目錄中直接拷貝bin文件夾,覆蓋掉hadoop-2.7.1/文件夾中的bin目錄即可


16、出現如下報錯:比較符號無法解析

解決方法:根據提示,比較符兩邊的值是Any類型(對於一個未定義類型的變量,scala默認爲Any型),解決辦法如下:兩個變量的類型要一致


17、對數據進行minMax放縮的時候報錯,意思是dataframe中列的格式不對。

Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: Column f0 must be of type struct<type:tinyint,size:int,indices:array<int>,values:array<double>> but was actually array<double>.

解決方法:利用VectorAssembler做個轉換操作。


18、讀取hdfs上的文件報錯,

報錯原因:hdfs的port配置出錯,這是因爲宿主機和hdfs有個port映射,宿主機的port是9000,映射到hdfs的port是50070,所以在配置的時候,應該設置port是宿主機的port。改完運行後


19、

出現下面問題主要是scala版本對應有問題,比如:scala版本是2.11的,但是在pom.xml文件中寫spark-hive依賴時是這樣寫的:spark-hive_2.12,所以運行時報上述錯誤,重新改成spark-hive_2.11即可。


20、

Error: value create is not a member of object org.apache.spark.ml.util.Instrumentation,實際中create的確是org.apache.spark.ml.util.Instrumentation中的方法。

出現這類問題有兩種可能原因及解決方法:

  1. 沒有相應的依賴,添加依賴即可;
  2. 依賴的版本問題,我這裏是因爲依賴裏的版本(2.4.4)太高了,改成2.3.2就好了。(參考https://www.oipapio.com/question-3924425

21、

Error:java: returnResource(redis.clients.jedis.Jedis) 在 redis.clients.jedis.JedisPool 中是 protected 訪問控制。

出現這個問題的原因:pom.xml中redis.clients.jedis的版本問題,版本太新了,將其從3.0.0降成2.9.0後就全好了。


22、

docker問題:安裝好docker之後,使用命令docker-machine create -d virtualbox default創建名稱爲default的虛擬機後報類似上面的錯誤。

分析:出現這個問題的原因是,1、C:\Users\admin\.docker\machine\cache文件夾下沒有boot2docker.iso鏡像,2、網速太慢了,下載不下來。

解決辦法:按照上面的github網址直接下載,下載後把該文件複製到C:\Users\admin\.docker\machine\cache文件夾下。


23、

Exception in the thread "main" org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1273706586-192.168.56.1-1570505951181:blk_1073741830_1006 file=/work/lr/metadata/part-00000

錯誤原因:在瀏覽器上看到datanode節點掛,可能是電腦睡眠導致的。


24、

Error:(345, 17) constructor LinearSVC Model in class LinearSVC Model cannot be accessed in object test1 val model = new LinearSVCModel(metadata.uid, coefficientsVector, intercept)

出現這個問題的原因:class LinearSVCModel的使用是有作用域的,其作用域限定爲org.apache.spark。

解決方法:必須將test1這個對象添加作用域org.apache.spark,添加方法爲在test1.scala首行添加package org.apache.spark。


25、使用jsonOBJ.getJSONObject()時,有的解析後含有方法keys,而有的沒有。

錯誤描述:解析JSON字符串的時候,兩段代碼是一樣的,但是發現上面的defaultparams存在方法keys,但是下面的defaultparams沒有方法keys。

解決方法:出現上述錯誤的原因是這裏存在java和scala的轉換,下面的代碼裏沒有引入scala.collection.JavaConversions._導致的,引入之後,問題解決了。


26、代碼運行到加載XGBoost模型時報如下Jar包錯誤:java.lang.RuntimeException: java.io.FileNotFoundException: File /lib/xgboost4j.dll was not found inside JAR.

檢查下pom中XGBoost依賴,

Google一下這個問題:

(1)這個鏈接https://github.com/dmlc/xgboost/issues/3683的解釋:jar包問題,如下

因爲報錯也是說缺少xgboost4j.dll文件,所以比較符合這個解釋,於是根據提示的鏈接https://github.com/criteo-forks/xgboost-jars/releases下載了下圖紅框裏的jar包。

(2)可以看看其它的解釋(沒試過裏面的方法),比如知乎裏有人說XGBoost支持spark版本2.3.0以上,但是我的spark版本是2.4.3的,所以應該不是這個問題。

解決方法:

(1)首先,因爲上面下載了xgboost4j-0.90-…-win64.jar包(其它版本也行,只要一致就行),所以在pom中將版本更新到0.90。

(2)找到maven中jar包的存放位置,如圖,下面0.90文件夾就是更新後重新下載的,

進入0.90的文件夾,有下面幾個文件,用winrar打開xgboost4j-0.90.jar進入lib文件夾會發現的確缺少xgboost4j.dll,而打開xgboost4j-0.90-…-win64.jar包會發現有該文件。

(3)將下載的xgboost4j-0.90-…-win64.jar包放到該0.90文件夾下。(其實放不放都無所謂)

(4)接下來,就是在idea中導入該jar包,按以下步驟操作,然後能看到被導入了。

(5)最後,問題被解決了。


27、

訓練模型後進行預測時報下圖中的錯誤:Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: Error loading metadata: Expected class name org.apache.spark.ml.classification.LogisticRegressionModel but found class name org.apache.spark.ml.classification.LogisticRegression。

錯誤描述:保存模型的時候,其實是保存的LogisticRegression類型,並沒有保存LogisticRegressionModel類型,查看保存路徑的文件夾也只有metadata文件,沒有data信息。

錯誤原因:定義的model0變量是LogisticRegression類型的,雖然使用了fit擬合數據,但此時並沒有重新定義變量來接受其fit之後的返回值(返回值類型是LogisticRegressionModel類型),所以write保存的時候就只是保存了模型的元數據信息model0變量。

解決方法:定義一個新的變量model1來接收變量model0擬合數據後的返回值,並將保存該返回值,如下圖。


28、ERROR datanode.DataNode:...遠程主機強迫關閉了一個現有的連接

解決方法:https://community.cloudera.com/t5/Support-Questions/ERROR-datanode-DataNode-error-processing-WRITE-BLOCK/m-p/238072


29、

問題:

1、因爲訓練模型的數據是沒有考慮精度的,而測試數據考慮了精度,只選取小數點後五位,發現模型預測結果出錯,將格式統一後,預測正確。(python)

2、根據1中格式統一後的數據放到spark上進行訓練時,預測同樣的數據出錯,也就是同樣的訓練數據和預測數據,在python上訓練得到的模型的預測結果是正確的,而在spark上訓練得到的模型的預測結果是錯誤的。

問題解決:spark的模型未設置參數,而python裏的參數有默認值;通過將spark裏的參數按照python裏默認的參數設置好就ok了。


30、(1)spark上訓練XGBoost模型報錯:java.io.IOException: Cannot run program “python”: CreateProcess error=2,系統找不到指定的文件。XGBoost包版本爲0.72.

出現上述錯誤的原因:idea中沒有配置python環境。

解決方法:在idea中按如下添加python路徑,注意python路徑中必須是python.exe,如果是python2.exe或python3.exe,都會報錯。

(2)按上述方法添加python環境變量後,再次運行又報如下錯誤,這個錯誤和第26個錯誤一樣: java.io.FileNotFoundException: File /lib/xgboost4j.dll was not found inside JAR.。


31、(1)ml.dmlc.xgboost4j.java.XGBoostError:C:\projects\xgboost-jars\xgboost\src\objective\regression-obj.cc:103:Check failed:Loss::CheckLabel(y) label must be in [0, 1] for logistic regression。

錯誤原因:xgboost參數設置時,objective參數設置爲了binary:logistic,而實際數據是多標籤的。

解決方法:將objective參數設置爲multi:softmax。

(2)ml.dmlc.xgboost4j.java.XGBoostError: value 0 for Parameter num_class should be greater equal to 1.

錯誤原因:參數設置錯誤,應該設置”num_class”,而不是”numClasses”。

解決方法:將”numClasses”->3改成”num_class”->3,參考:https://github.com/dmlc/xgboost/issues/3186。其它參數設置見下圖:


32、ml.dmlc.xgboost4j.java.XGBoostError: [16:36:18] C:\projects\xgboost-jars\xgboost\src\objective\regression_obj.cc:44: Check failed: preds->Size() == info.labels_.size() (4422 vs. 1474) labels are not correctly providedpreds.size=4422, label.size=1474。

錯誤原因:參數設置錯誤,目標是二分類問題("objective" -> "binary:logistic"),但是類別數設置爲多分類("num_class"->3)。解決方法:將類別參數設置正確("num_class"->2),參考https://github.com/dmlc/xgboost/issues/2563


33、spark中objective裏softprob和softmax的區別?

(1)當參數objective設置爲softmax時,transform中probabilities和prediction的輸出結果爲

(2)當參數objective設置爲softprob時,transform中probabilities和prediction的輸出結果爲

其中,probabilities列的輸出爲

區別爲:當設置爲softmax時,transform方法生成的probabilities值是分類結果值,所以其prediction都會是0(用predict方法的結果也會是0);而當參數設置爲softprob時,transform方法生成的probabilities值是各個類別的概率值。


34、

(1)Error:(108, 46) could not find implicit value for parameter sparkContext: org.apache.spark.SparkContext

  val model = XGBoost.loadModelFromHadoopFile("hdfs://localhost:9000/work/xgboost/saving_model/saving_model")

(2)Error:(108, 46) not enough arguments for method loadModelFromHadoopFile: (implicit sparkContext: org.apache.spark.SparkContext)ml.dmlc.xgboost4j.scala.spark.XGBoostModel.Unspecified value parameter sparkContext.

  val model = XGBoost.loadModelFromHadoopFile("hdfs://localhost:9000/work/xgboost/saving_model/saving_model")

解決方法:加上這句話:implicit val sc = spark.sparkContext


35、java.io.FileNotFoundException: Path is not a file: /work/xgboost/saving_model

解決方法:xgboost加載hadoop文件要具體到文件名。


36、問題描述:右鍵點擊Run的時候,test前面”[Spark Job]”,然後運行時報錯:Error running '[Spark Job] test': Cannot start process, the working directory 'D:\work\NoSense\code\service\registerDetect\code\kg\data\__default__\user\current' does not exist.

出現問題的原因:出現上述bug是因爲沒有配置好運行環境,具體做法如下:

       第一步:點擊Edit Configurations;

        第二步:點擊圖中紅色減號刪除;

第三步,一定要選+號(之前在default裏選擇Application後,還是沒用)

第四步,一定要把Main class改成程序裏的主類名

出現下面的圖,環境就ok了。


37、(1)Exception in thread "main" org.apache.spark.sql.AnalysisException: "count" is not a numeric column. Aggregation function can only be applied on a numeric column.;

解決方法:

    (1)

.sum("count") => .agg("count"->"sum")

   (2)將列類型改爲數值型。

(2)Error:not found: value desc        .sort(desc("destination_total"))

解決方法

      (1)因爲沒有引入內建函數導致的,

import org.apache.spark.sql.functions._

38、Error: cannot resolve symbol XXX

原因:出現上述錯誤,一般是缺少東西導致的——包、依賴、編譯器自身的設置和緩存問題。

(1)沒有引入相應的包,如37中第2個問題。

(2)參考:https://blog.csdn.net/lesaqiu/article/details/54846960

          1)解決第一類:1、檢查項目的pom文件,是否必要的依賴都寫清楚了;2、是否使用自己的私有庫;3、依賴添加正確後,檢查本地的類有沒有下載下來,一般是找“C:\Users\Administrator\.m2\repository”這個路徑下有沒有相應的jar包,如果沒有的話,就在編譯器中打開”Maven Projects “標籤,先進行clean一下,在執行install,這裏與在命令行下執行是一樣的效果。

          2)解決第二類:1、 File - Project Structure - Project SDK,看看SDK有沒有選,重選一個本地的自己安裝的jdk。2、編譯器中的maven有沒有設置成功,File - Settings - 搜索maven,Maven home directory,設置爲自己安裝的maven路徑。3、如果還是報錯找不到,試試右側Maven Projects - Report ,刷新樣式的按鈕,清除下編譯器的緩存就好了。

(3)參考:https://blog.csdn.net/qq_23876393/article/details/78851061

          1)File->project structrure->project,確認兩點,一,正確選擇了已安裝的jdk;二,specific language level不高於jdk版本。

          2)File->project structrure->Global Libraries,確認正確添加scala sdk。若已正確添加,右鍵scala sdk->add to mudules,添加到相應項目,靜等5s鍾,應該就可以了,如果電腦配置較差,試試右側Maven Projects -> Reimport ,清除下編譯器的緩存就好了,或者File->Invalidate Caches,重啓IDEA。
          3)File->settings->Maven,正確添加maven、repository和settings.xml路徑。
 


39、(1)spark使用jdbc連接數據庫,報錯:Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver。

解決方法:在pom.xml中添加依賴:mysql-connector-java

(2)上面問題解決後,又報錯:Exception in thread "main" java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

解決方法:添加信息,"url" -> "jdbc:mysql://localhost:3306/test?serverTimezone=GMT"


40、安裝好Hbase後,輸入命令:hbase version驗證是否安裝成功時,報錯:Error: Could not find or load main class org.apache.hadoop.hbase.util.GetJavaProperty Error: Could not find or load main class org.apache.hadoop.hbase.util.VersionInfo

問題原因:hadoop版本與hbase版本不一致;

解決方法:找到版本一致的hbase重新安裝。

41、ERROR:java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Ljava.lang.String;

 org.apache.spark.SparkException: Failed to execute user defined function(anonfun$10: (array<string>) => int)
	at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.serializefromobject_doConsume_0$(Unknown Source)
	at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
	at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
	at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$10$$anon$1.hasNext(WholeStageCodegenExec.scala:614)
	at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:253)
	at org.apache.spark.sql.execution.SparkPlan$$anonfun$2.apply(SparkPlan.scala:247)
	at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:830)
	at org.apache.spark.rdd.RDD$$anonfun$mapPartitionsInternal$1$$anonfun$apply$25.apply(RDD.scala:830)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
	at org.apache.spark.scheduler.Task.run(Task.scala:109)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Ljava.lang.String;
	at conGraph.constructGraph2$$anonfun$10.apply(constructGraph2.scala:117)
	... 20 more

代碼:

val splitTrans = functions.udf{
      x:String =>
        var tmp = x.split("\\&",-1)
        var res = ArrayBuffer[String]()
        for(i <- tmp){
          var tmp1 = i.split("\\ \\-\\>\\ ",-1)
          res += tmp1(0)
        }
        res.toArray
    }

    val compare = functions.udf{
      x:Array[String] =>
        x.length
    }
    data3.withColumn("account_array",splitTrans($"res")).show(false)
    var data4 = data3.withColumn("account_array",splitTrans($"res")).where(compare($"account_array")>1).select("acc","account_array")

錯誤原因:

    (1)scala和java的類型轉換不匹配的問題,見https://blog.csdn.net/mtj66/article/details/87856543

    (2)此Array非Scala中的原生Array,而是封裝了一下的Array,見https://www.cnblogs.com/wswang/p/7909077.html

解決辦法:將Array改成Seq

42、Exception in thread "main" org.apache.spark.sql.AnalysisException: Table or view not found: data1 Caused by: org.apache.spark.sql.catalyst.analysis.NoSuchTableException: Table or view 'data1' not found in database 'default';

錯誤原因:如果搜索 Table or view 'data1' not found in database 'default',網上有很多博客說是項目resources中沒有hive-site.xml文件,拷貝到resource,嘗試之後發現還是報錯,查找一番後發現是代碼錯了,如下

data.createOrReplaceGlobalTempView("data")
var sqltxt = "select * from data"
data = spark.sql(sqltxt)

用錯了createOrReplaceGlobalTempView和createOrReplaceTempView。

解決方法:

(1)繼續在createOrReplaceGlobalTempView上更改成如下,參考https://blog.csdn.net/Chengliangyao/article/details/80619970

data.createOrReplaceGlobalTempView("data")
var sqltxt = "select * from global_temp.data"
data = spark.sql(sqltxt)

(2)第二種改法,如下

data.createOrReplaceTempView("data")
var sqltxt = "select * from global_temp.data"
data = spark.sql(sqltxt)

43、數據寫入parquet文件報錯:org.apache.spark.sql.AnalysisException: parquet Attribute name "grade,purpose" contains invalid character(s) among ",;{}()\n\t=".

原因:跟錯誤描述一致,在寫入parquet的表某列的列名包含有無效字符;

解決方法:將逗號更改爲#

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章