介紹DataFrames——Python

本文提供了一些常見的編碼示例PySpark DataFrame api使用Python。

DataFrame是一個二維標簽數據結構可能不同類型的列。你能想到的DataFrame像電子表格,SQL表或詞典係列對象。的更多信息和示例,請參見快速入門在Apache火花文檔網站上。

創建DataFrames

下麵的例子使用了火花SQL創建幾個DataFrames。的內容幾這些DataFrames然後打印出來。

#從模塊導入pyspark類行sqlpyspark.sql進口*#創建示例數據-部門和員工#創建部門department1=(id=“123456”,的名字=“計算機科學”)department2=(id=“789012”,的名字=“機械工程”)department3=(id=“345678”,的名字=“戲劇和戲劇”)department4=(id=“901234”,的名字=“室內娛樂”)#創建員工員工=(“firstName”,“姓”,“電子郵件”,“工資”)employee1=員工(“邁克爾”,“時常要”,“no-reply@berkeley.edu”,100000年)employee2=員工(“xiangrui”,“孟”,“no-reply@stanford.edu”,120000年)employee3=員工(馬泰的,沒有一個,“no-reply@waterloo.edu”,140000年)employee4=員工(沒有一個,“溫德爾”,“no-reply@berkeley.edu”,160000年)employee5=員工(“邁克爾”,“傑克遜”,“no-reply@neverla.nd”,80000年)#創建DepartmentWithEmployees實例從部門和員工departmentWithEmployees1=(部門=department1,員工=(employee1,employee2])departmentWithEmployees2=(部門=department2,員工=(employee3,employee4])departmentWithEmployees3=(部門=department3,員工=(employee5,employee4])departmentWithEmployees4=(部門=department4,員工=(employee2,employee3])打印(department1)打印(employee2)打印(departmentWithEmployees1員工(0]電子郵件)

輸出:

行(id = ' 123456 ', name =“計算機科學”)行(firstName = xiangrui, lastName =“孟”,郵件= ' no-reply@stanford.edu ',工資= 120000)no-reply@berkeley.edu

看到DataFrame創造在PySpark文檔。

從列表中創建DataFrames的行

下麵的例子使用了createDataFrame的方法SparkSession(這是Databricks-provided所代表的火花變量)來創建一個DataFrame來自前麵的示例列表的行。

departmentsWithEmployeesSeq1=(departmentWithEmployees1,departmentWithEmployees2]df1=火花createDataFrame(departmentsWithEmployeesSeq1)df1顯示(截斷=)departmentsWithEmployeesSeq2=(departmentWithEmployees3,departmentWithEmployees4]df2=火花createDataFrame(departmentsWithEmployeesSeq2)df2顯示(截斷=)

輸出:

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + + | |部門員工- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |計算機科學{123456}|[{邁克爾,時常要,no-reply@berkeley.edu, 100000}, {xiangrui,孟,no-reply@stanford.edu, 120000}] | |{789012,機械工程}|[{馬泰,null, no-reply@waterloo.edu, 140000年},{null,溫德爾,no-reply@berkeley.edu, 160000}] | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + + | |部門員工- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |{345678、戲劇和戲劇}|[{邁克爾,傑克遜,no-reply@neverla。nd 80000}, {null,溫德爾,no-reply@berkeley.edu, 160000}] | |{901234年,室內娛樂}| [{xiangrui,孟,no-reply@stanford.edu, 120000年},{馬泰,null, no-reply@waterloo.edu, 140000年}]| + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

使用DataFrames

聯盟兩個DataFrames

下麵的例子使用了聯盟方法結合指定的行成一個新的DataFrame DataFrame前麵的例子。

unionDF=df1聯盟(df2)unionDF顯示(截斷=)

輸出:

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + + | |部門員工- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |計算機科學{123456}|[{邁克爾,時常要,no-reply@berkeley.edu, 100000}, {xiangrui,孟,no-reply@stanford.edu, 120000}] | |{789012,機械工程}|[{馬泰,null, no-reply@waterloo.edu, 140000年},{null,溫德爾,no-reply@berkeley.edu, 160000}] | |{345678、戲劇和戲劇}|[{邁克爾,傑克遜,no-reply@neverla。nd 80000}, {null,溫德爾,no-reply@berkeley.edu, 160000}] | |{901234年,室內娛樂}| [{xiangrui,孟,no-reply@stanford.edu, 120000年},{馬泰,null, no-reply@waterloo.edu, 140000年}]| + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

寫聯合DataFrame鋪文件

下麵的例子使用了rm命令(dbutils.fs.rm)的方法文件係統實用程序(dbutils.fs)磚公用事業刪除指定的拚花文件,如果它存在。的然後使用方法拚花方法產生的DataFrameWriter寫DataFrame從前麵的示例指定位置的磚鋪格式的工作區。

#刪除文件是否存在dbutilsfsrm(“/ tmp / databricks-df-example.parquet”,真正的)unionDF格式(“鋪”)保存(“/ tmp / databricks-df-example.parquet”)

讀DataFrame鑲花的文件

下麵的例子使用了方法使用拚花方法產生的DataFrameReader在指定位置讀取鋪文件到一個DataFrame然後顯示DataFrame的內容。

parquetDF=火花格式(“鋪”)負載(“/ tmp / databricks-df-example.parquet”)parquetDF顯示(截斷=)

輸出:

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + + | |部門員工- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + |{789012,機械工程}|[{馬泰,null, no-reply@waterloo.edu, 140000年},{null,溫德爾,no-reply@berkeley.edu, 160000}] | |{901234年,室內娛樂}| [{xiangrui,孟,no-reply@stanford.edu, 120000年},{馬泰,null, no-reply@waterloo.edu, 140000年}]| |{345678、戲劇和戲劇}|[{邁克爾,傑克遜,no-reply@neverla。nd 80000}, {null,溫德爾,no-reply@berkeley.edu, 160000}] | |計算機科學{123456}|[{邁克爾,時常要,no-reply@berkeley.edu, 100000}, {xiangrui,孟,no-reply@stanford.edu, 120000}] | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

爆炸員工列

下麵的例子使用了選擇方法前DataFrame項目到一個新的DataFrame一組表達式。在這種情況下,爆炸為每個函數返回一個新行員工物品。的別名方法使用e速記的列。的selectExpr方法新DataFrame項目一組新DataFrame SQL表達式。

pyspark.sql.functions進口爆炸explodeDF=unionDF選擇(爆炸(“員工”)別名(“e”))flattenDF=explodeDFselectExpr(“e.firstName”,“e.lastName”,“e.email”,“e.salary”)flattenDF顯示(截斷=)

輸出:

+ - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + | firstName | lastName工資郵件| | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + michael | | armbrust no-reply@berkeley.edu | | 100000 | | xiangrui no-reply@stanford.edu孟| | | 120000 | |馬泰no-reply@waterloo.edu零| | | 140000 | |零|溫德爾no-reply@berkeley.edu | | 160000 | |邁克爾·傑克遜| | no-reply@neverla。nd | 80000 | |零|溫德爾no-reply@berkeley.edu | | 160000 | | xiangrui no-reply@stanford.edu孟| | | 120000 | |馬泰零no-reply@waterloo.edu | 140000 | + | | - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

使用filter ()返回一個謂詞相匹配的行

下麵的例子使用了過濾器方法前DataFrame隻顯示這些行firstName字段的值是xiangrui。然後它使用排序方法對結果進行排序的值的行”字段。

filterDF=flattenDF過濾器(flattenDFfirstName= =“xiangrui”)排序(flattenDF)filterDF顯示(截斷=)

輸出:

+ - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + | firstName | lastName工資郵件| | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + | xiangrui no-reply@stanford.edu孟| | | 120000 | | xiangrui孟no-reply@stanford.edu | 120000 | + | | - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

此示例類似於上一個,除了它隻顯示這些行firstName字段的值是xiangrui邁克爾

pyspark.sql.functions進口上校,asc#使用“|”而不是”或“filterDF=flattenDF過濾器((上校(“firstName”)= =“xiangrui”)|(上校(“firstName”)= =“邁克爾”))排序(asc(“姓”))filterDF顯示(截斷=)

輸出:

+ - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + | firstName | lastName工資郵件| | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + michael | | armbrust no-reply@berkeley.edu | | 100000 | |邁克爾·傑克遜| | no-reply@neverla。no-reply@stanford.edu孟nd | 80000 | | xiangrui | | | 120000 | | xiangrui孟no-reply@stanford.edu | 120000 | + | | - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

在()子句相當於filter ()

這個例子相當於前麵的示例中,除了它使用在哪裏方法,而不是過濾器方法。

whereDF=flattenDF在哪裏((上校(“firstName”)= =“xiangrui”)|(上校(“firstName”)= =“邁克爾”))排序(asc(“姓”))whereDF顯示(截斷=)

輸出:

+ - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + | firstName | lastName工資郵件| | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + michael | | armbrust no-reply@berkeley.edu | | 100000 | |邁克爾·傑克遜| | no-reply@neverla。no-reply@stanford.edu孟nd | 80000 | | xiangrui | | | 120000 | | xiangrui孟no-reply@stanford.edu | 120000 | + | | - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

取代值和- - -使用DataFrame Na函數

下麵的例子使用了fillna前麵的方法flattenDFDataFrame代替所有值的字符- - -

nonNullDF=flattenDFfillna(”——“)nonNullDF顯示(截斷=)

之前:

+ - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + | firstName | lastName工資郵件| | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + michael | | armbrust no-reply@berkeley.edu | | 100000 | | xiangrui no-reply@stanford.edu孟| | | 120000 | |馬泰no-reply@waterloo.edu零| | | 140000 | |零|溫德爾no-reply@berkeley.edu | | 160000 | |邁克爾·傑克遜| | no-reply@neverla。nd | 80000 | |零|溫德爾no-reply@berkeley.edu | | 160000 | | xiangrui no-reply@stanford.edu孟| | | 120000 | |馬泰零no-reply@waterloo.edu | 140000 | + | | - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

後:

+ - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + | firstName | lastName工資郵件| | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + michael | | armbrust no-reply@berkeley.edu | | 100000 | | xiangrui no-reply@stanford.edu孟| | | 120000 | |馬泰no-reply@waterloo.edu | - - - | | 140000 | | - - - |溫德爾no-reply@berkeley.edu | | 160000 | |邁克爾·傑克遜| | no-reply@neverla。nd | 80000 | | - - - |溫德爾no-reply@berkeley.edu | | 160000 | | xiangrui no-reply@stanford.edu孟| | | 120000 | |馬泰no-reply@waterloo.edu | 140000 | + | - - - | - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

隻檢索行與失蹤firstName

下麵的例子使用了過濾器前麵的方法flattenDFDataFrame隨isNull的方法的類來顯示所有行firstName現場有一個價值。

filterNonNullDF=flattenDF過濾器(上校(“firstName”)isNull()|上校(“姓”)isNull())排序(“電子郵件”)dfilterNonNullDF顯示(截斷=)

輸出:

+ - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + | firstName | lastName工資郵件| | | + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - + +零| |溫德爾no-reply@berkeley.edu | | 160000 | |零|溫德爾no-reply@berkeley.edu | | 160000 | |馬泰no-reply@waterloo.edu零| | | 140000 | |馬泰零no-reply@waterloo.edu | 140000 | + | | - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

示例聚合使用gg ()countDistinct ()

下麵的例子使用了選擇,groupBy,gg以前的方法nonNullDFDataFrame隻選擇行”firstName領域,集團的結果firstName字段的值,然後再顯示不同的數量每個名字的字段值。對於每個名字,發現隻有一個不同的姓,除了邁克爾,兩個邁克爾時常要邁克爾傑克遜

pyspark.sql.functions進口countDistinctcountDistinctDF=nonNullDF選擇(“firstName”,“姓”)\groupBy(“firstName”)\gg(countDistinct(“姓”)別名(“distinct_last_names”))countDistinctDF顯示()

輸出:

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | firstName | distinct_last_names | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +零| | 1 | | xiangrui | 1 | |馬泰| 0 | |邁克爾| 2 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

比較DataFrame和SQL查詢物理計劃

下麵的例子使用了解釋前麵的示例的方法DataFrame打印結果的物理計劃用於調試目的。

提示

他們應該是相同的。

countDistinctDF解釋()

下麵的例子使用了createOrReplaceTempView前麵的示例的方法DataFrame DataFrame創建一個本地臨時視圖。這個臨時視圖存在,直到相關引發會話超出範圍。這個例子然後使用會話的火花sql這個臨時視圖上運行一個查詢的方法。物理然後顯示該查詢計劃。的結果解釋電話應該與前麵的相同解釋調用。

#注冊DataFrame作為臨時的視野,使我們可以通過使用SQL查詢。nonNullDFcreateOrReplaceTempView(“databricks_df_example”)#執行相同的查詢作為前DataFrame然後顯示其物理計劃。countDistinctDF_sql=火花sql(“‘選擇firstName, count(不同的lastName) distinct_last_names從databricks_df_example集團的名字“‘)countDistinctDF_sql解釋()

總結所有的薪水

下麵的例子使用了gg前麵的方法nonNullDFDataFrame顯示所有行薪水的總和。

salarySumDF=nonNullDFgg({“工資”:“和”})salarySumDF顯示()

輸出:

+ - - - - - - - - - - - - +(工資)| + |和| 1020000 | - - - - - - - - - - - - + + - - - - - - - - - - - - +

這個例子顯示的基礎數據類型工資前DataFrame字段,這是一個長整型數字

匹配=“工資”關鍵,價值nonNullDFdtypes:如果關鍵= =匹配:打印(f“數據類型”{匹配}“是”{價值}’。”)

輸出:

數據類型的‘工資’是‘bigint’。

一個例子使用熊貓和Matplotlib集成

下麵的例子使用了熊貓Matplotlib庫來顯示前麵nonNullDFDataFrame的信息圖形化。下麵的例子使用了toPandas方法DataFrame輸出DataFrame內容的熊貓DataFrame,它使用clf情節的方法matplotlib.pyplot在Matplotlib清理繪製表麵,然後創建實際的陰謀。

進口熊貓作為pd進口matplotlib.pyplot作為pltpltclf()pdDF=nonNullDFtoPandas()pdDF情節(x=“firstName”,y=“工資”,=“酒吧”,腐爛=45)顯示()

輸出:

Matplotlib輸出

清除:清除鋪文件

下麵的例子使用了rm命令(dbutils.fs.rm)的方法文件係統實用程序(dbutils.fs)磚公用事業刪除的鑲花文件最初對本文的開頭寫的。

dbutilsfsrm(“/ tmp / databricks-df-example.parquet”,真正的)

DataFrame常見問題

這個FAQ地址常見用例和示例使用使用可用的api。更詳細的API的描述,請參閱PySpark文檔

我怎樣才能獲得更好的性能與DataFrame udf嗎?

如果存在於內置函數的功能,使用這些會表現得更好。使用例子。也看到PySpark功能API參考。使用內置函數和withColumn ()API添加新列。您還可以使用withColumnRenamed ()後替換現有列變換。

pyspark.sql進口功能作為Fpyspark.sql.types進口*# DataFrame數據集構建一個例子。dbutilsfsrm(“/ tmp / dataframe_sample.csv”,真正的)dbutilsfs(“/ tmp / dataframe_sample.csv”,”““id | end_date | start_date |位置1 | 2015-10-14就是| 2015-09-14就是| CA-SF2 | 2015-10-15 01:00:20 | 2015-08-14就是| CA-SD3 | 2015-10-16 02:30:00 | 2015-01-14就是| NY-NY4 | 2015-10-17 03:00:20 | 2015-02-14就是| NY-NY5 | 2015-10-18 04:30:00 | 2014-04-14就是| CA-SD”“”,真正的)df=火花格式(“csv”)選項(=“真正的”,分隔符=“|”)負載(“/ tmp / dataframe_sample.csv”)dfprintSchema()
#而不是注冊一個UDF調用內建函數的列上執行操作。#這將提供一個性能改進的內置命令編譯和運行平台的JVM。Beplay体育安卓版本#轉換為日期類型df=dfwithColumn(“日期”,Fto_date(dfend_date))#解析日期df=dfwithColumn(“date_only”,Fregexp_replace(dfend_date,”(\ d +) [:] (\ d +) [:] (\ d +) *美元。”,))#分割字符串和索引字段df=dfwithColumn(“城市”,F分裂(df位置,“- - -”)[1])#執行日期比較功能df=dfwithColumn(“date_diff”,Fdatediff(Fto_date(dfend_date),Fto_date(dfstart_date)))
dfcreateOrReplaceTempView(“sample_df”)顯示(sql(“從sample_df select *”))

我想把DataFrame JSON字符串返回卡夫卡。

有一個潛在的toJSON ()函數返回一個JSON字符串使用抽樣列名和模式產生的JSON記錄。

rdd_json=dftoJSON()rdd_json(2)

我的UDF將參數包括列操作。我怎麼通過這個參數嗎?

有一個函數可以調用點燃()創建一個常數列。

pyspark.sql進口功能作為Fadd_n=udf(λx,y:x+y,IntegerType())#我們注冊一個UDF DataFrame添加一個列,我們把id列整數類型。df=dfwithColumn(“id_offset”,add_n(F點燃(1000年),dfid(IntegerType())))
顯示(df)
#任何常量使用UDF將自動通過工人N=90年last_n_days=udf(λx:x<N,BooleanType())df_filtered=df過濾器(last_n_days(dfdate_diff))顯示(df_filtered)

我有一個表在蜂房裏metastore我想DataFrame訪問表。這是最好的方式來定義什麼?

有多種方法定義一個DataFrame從注冊表。調用表(表)或選擇使用一個SQL查詢和篩選特定列:

#都返回DataFrame類型df_1=(“sample_df”)df_2=火花sql(“從sample_df select *”)

我想清除所有緩存的表在當前集群。

有一個可用的API在全球層麵或每桌。

火花目錄clearCache()火花目錄cacheTable(“sample_df”)火花目錄uncacheTable(“sample_df”)

我想計算總量列上。做這個最好的方法是什麼?

gg (* exprs)方法接受一個列名列表和表達式的類型聚合你想計算。看到pyspark.sql.DataFrame.agg。您可以使用內置函數在每一列的表達式。

#提供最小,計數,avg和groupBy location列。結果還agg_df=dfgroupBy(“位置”)gg(F最小值(“id”),F(“id”),Favg(“date_diff”))顯示(agg_df)

我想寫出DataFrames拚花,但想分區特定列。

您可以使用以下api來完成這項工作。確保代碼沒有創建大量的分區列的數據集,否則元數據的開銷可能會導致顯著的緩慢波動。如果有一個SQL表這個目錄,您需要調用刷新<表名稱>前更新元數據查詢。

df=dfwithColumn(“end_month”,F(“end_date”))df=dfwithColumn(“end_year”,F一年(“end_date”))dfpartitionBy(“end_year”,“end_month”)格式(“鋪”)保存(“/ tmp / sample_table”)顯示(dbutilsfsls(“/ tmp / sample_table”))

如何妥善處理情況我想過濾空數據?

您可以使用filter ()並提供類似的語法就像跟一個SQL查詢。

null_item_schema=StructType([StructField(“col1”,StringType(),真正的),StructField(“col2”,IntegerType(),真正的)))null_df=火花createDataFrame(((“測試”,1),(沒有一個,2)),null_item_schema)顯示(null_df過濾器(“col1 NOT NULL”))

我怎麼推斷模式使用CSVspark-avro庫嗎?

有一個inferSchema選擇標記。提供一個頭確保適當的列命名。

adult_df=火花\格式(“com.spark.csv”)\選項(“頭”,“假”)\選項(“inferSchema”,“真正的”)負載(“dbfs: / databricks-datasets /成人/ adult.data”)adult_dfprintSchema()

你有一個分隔的字符串數據集,你想把他們的數據類型。你將如何做到這一點?

使用抽樣api來過濾出畸形行和映射到適當的類型的值。我們定義一個函數,過濾器使用正則表達式。