取消
顯示的結果
而不是尋找
你的意思是:

轉換一個轉換用火花PySpark Scala

RiyazAli
貢獻者三世

你好所有的,

我一直負責Scala火花代碼轉換為PySpark代碼以最小的變化(直譯)。

我遇到一些自稱是理解列表的代碼。看看以下代碼片段:

% scala val desiredColumn = Seq (“firstName”、“middleName”,“姓”)val colSize = desiredColumn。大小val columnList =(我< - 0直到colSize)收益率美元“元素”.getItem (i) .alias (desiredColumn(我)打印(columnList) / / df_nameSplit。選擇(columnList: _ *),告訴(假)

輸出這個代碼片段:

向量([0]firstName,元素middleName[1],[2]的元素為lastName) desiredColumn: Seq [String] =列表(firstName、middleName lastName) colSize: Int = 3 columnList: scala.collection.immutable.IndexedSeq [org.apache.spark.sql。列)=向量([0]firstName,元素middleName[1],[2]的元素為lastName)

同時,“df_nameSplit”的模式數據幀是下麵列的元素是一個分裂的“名稱”列:

根|——名稱:字符串(nullable = true) |——dob_year:字符串(nullable = true) |——性別:字符串(nullable = true) |——工資:長(可空= true) |——元素:數組(nullable = true) | |——元素:字符串(containsNull = false)

PySpark版本的代碼我能夠提出:

desired_columns = [“firstName”、“middleName”,“姓”)col_size len (desired_columns) col_list = = [df_nameSplit.select(坳(“元素”).getItem (i) .alias (desired_columns[我]))我的範圍(col_size)]打印(col_list) # df_nameSplit.select (* col_list) .display ()

輸出PySpark代碼:

[DataFrame [firstName: string], DataFrame middleName: string, DataFrame [lastName: string]]

有人能幫我,我錯了嗎?

標簽@Kaniz Fatma更好達到!

1接受解決方案

接受的解決方案

帕特
尊敬的貢獻者三世

嗨@Riyaz阿裏,

檢查這一個:

desired_columns = [“firstName”、“middleName”,“姓”)col_size len (desired_columns) col_list = =[坳(“元素”).getItem (i) .alias (desired_columns[我])範圍(col_size)]我的打印(col_list)

的輸出是:

(列<元素[0]firstName的>,列<“元素[1]為middleName”>,列<的元素[2]為lastName >)

測試:

從pyspark.sql。類型進口StringType ArrayType arrayCol = ArrayType (StringType(),假)模式= StructType ([StructField (“id”, StringType(),真的),StructField(“元素”,ArrayType (StringType()),真的)])data =[(“1”,(“約翰”,“傑克”,“母鹿”])]df = spark.createDataFrame (data =數據,模式=)df.printSchema () df.show()根| - id:字符串(nullable = True) |——元素:數組(nullable = True) | |——元素:字符串(containsNull = True) + - - - + - - - - - - - - - - - - - - - - - - | + | | id元素+ - - - + - - - - - - - - - - - - - - - - - - + | 1 |(約翰,傑克,doe) | + - - - + - - - - - - - - - - - - - - - - - - + df.select (* col_list) .display()輸出:+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | firstName | middleName | lastName | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +約翰·傑克| | | doe | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

在原帖子查看解決方案

3回複3

帕特
尊敬的貢獻者三世

嗨@Riyaz阿裏,

檢查這一個:

desired_columns = [“firstName”、“middleName”,“姓”)col_size len (desired_columns) col_list = =[坳(“元素”).getItem (i) .alias (desired_columns[我])範圍(col_size)]我的打印(col_list)

的輸出是:

(列<元素[0]firstName的>,列<“元素[1]為middleName”>,列<的元素[2]為lastName >)

測試:

從pyspark.sql。類型進口StringType ArrayType arrayCol = ArrayType (StringType(),假)模式= StructType ([StructField (“id”, StringType(),真的),StructField(“元素”,ArrayType (StringType()),真的)])data =[(“1”,(“約翰”,“傑克”,“母鹿”])]df = spark.createDataFrame (data =數據,模式=)df.printSchema () df.show()根| - id:字符串(nullable = True) |——元素:數組(nullable = True) | |——元素:字符串(containsNull = True) + - - - + - - - - - - - - - - - - - - - - - - | + | | id元素+ - - - + - - - - - - - - - - - - - - - - - - + | 1 |(約翰,傑克,doe) | + - - - + - - - - - - - - - - - - - - - - - - + df.select (* col_list) .display()輸出:+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | firstName | middleName | lastName | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +約翰·傑克| | | doe | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

RiyazAli
貢獻者三世

謝謝@Pat Sienkiewicz !

這整個許多道理!不知道為什麼我選擇從一個數據幀時,所有我需要的列。

RiyazAli
貢獻者三世

另一個後續問題,如果你不介意的話。@Pat Sienkiewicz

正如我試圖解析名字列到多個列。我遇到下麵的數據:

(“詹姆斯,\”,B \”,史密斯”,“2018”,“M”, 3000年)

為了解析這些comma-included中間的名字,我用的是“from_csv”功能。

Scala火花代碼看起來像下麵的:

% scala使用from_csv函數/ /模式分裂定義列。val選項=地圖(“9”- >”、“)val df_split = df。選擇(“*”美元,F.from_csv(“名字”美元,simpleSchema選項).alias (“value_parsed”)) val df_multi_cols = df_split。選擇(“*”、“value_parsed . *”) .drop (value_parsed) df.show (false) df_multi_cols.show(假)

上麵提到的模式如下:

scala中的% scala模式/ / val simpleSchema = new StructType閥門()(“firstName”, StringType)閥門閥門(“middleName”, StringType)(“姓”,StringType)

現在PySpark我的代碼是:

#模式PySpark simple_schema = (StructType閥門()(“firstName”, StringType())閥門(middleName, StringType())閥門(“姓”,StringType()))選項= {' 9 ':','}df_split = df_is。選擇(“*”,from_csv (df_is.name、simple_schema選項).alias (“value_parsed”)) # df_split.printSchema ()

製造一個錯誤:“TypeError:模式參數應該是一個列或字符串的

現在錯誤後,如果我定義SQL中的架構風格(引用),它的工作原理。

選擇= {' 9 ':','}df_split = df_is。選擇(“*”,from_csv (df_is.name“firstName字符串,middleName字符串,lastName字符串”,選項).alias (“value_parsed”)) df_split.printSchema ()

我好奇為什麼在PySpark Scala中的火花,為什麼不工作。任何領導將不勝感激。

最好的,

Riz

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map