婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > pyspark創建DataFrame的幾種方法

pyspark創建DataFrame的幾種方法

熱門標簽:唐山智能外呼系統一般多少錢 哈爾濱ai外呼系統定制 海南400電話如何申請 激戰2地圖標注 白銀外呼系統 騰訊外呼線路 公司電話機器人 陜西金融外呼系統 廣告地圖標注app

pyspark創建DataFrame

為了便于操作,使用pyspark時我們通常將數據轉為DataFrame的形式來完成清洗和分析動作。

RDD和DataFrame

在上一篇pyspark基本操作有提到RDD也是spark中的操作的分布式數據對象。

這里簡單看一下RDD和DataFrame的類型。

print(type(rdd))  # class 'pyspark.rdd.RDD'>
print(type(df))   # class 'pyspark.sql.dataframe.DataFrame'>

翻閱了一下源碼的定義,可以看到他們之間并沒有繼承關系。

class RDD(object):

    """
    A Resilient Distributed Dataset (RDD), the basic abstraction in Spark.
    Represents an immutable, partitioned collection of elements that can be
    operated on in parallel.
    """

class DataFrame(object):
    """A distributed collection of data grouped into named columns.

    A :class:`DataFrame` is equivalent to a relational table in Spark SQL,
    and can be created using various functions in :class:`SparkSession`::
 ...
    """

RDD是一種彈性分布式數據集,Spark中的基本抽象。表示一種不可變的、分區儲存的集合,可以進行并行操作。
DataFrame是一種以列對數據進行分組表達的分布式集合, DataFrame等同于Spark SQL中的關系表。相同點是,他們都是為了支持分布式計算而設計。

但是RDD只是元素的集合,但是DataFrame以列進行分組,類似于MySQL的表或pandas中的DataFrame。

實際工作中,我們用的更多的還是DataFrame。

使用二元組創建DataFrame

嘗試第一種情形發現,僅僅傳入二元組,結果是沒有列名稱的。
于是我們嘗試第二種,同時傳入二元組和列名稱。

a = [('Alice', 1)]
output = spark.createDataFrame(a).collect()
print(output)
# [Row(_1='Alice', _2=1)]

output = spark.createDataFrame(a, ['name', 'age']).collect()
print(output)
# [Row(name='Alice', age=1)]

這里collect()是按行展示數據表,也可以使用show()對數據表進行展示。

spark.createDataFrame(a).show()
# +-----+---+
# |   _1| _2|
# +-----+---+
# |Alice|  1|
# +-----+---+

spark.createDataFrame(a, ['name', 'age']).show()
# +-----+---+
# | name|age|
# +-----+---+
# |Alice|  1|
# +-----+---+

使用鍵值對創建DataFrame

d = [{'name': 'Alice', 'age': 1}]
output = spark.createDataFrame(d).collect()
print(output)

# [Row(age=1, name='Alice')]

使用rdd創建DataFrame

a = [('Alice', 1)]
rdd = sc.parallelize(a)
output = spark.createDataFrame(rdd).collect()
print(output)
output = spark.createDataFrame(rdd, ["name", "age"]).collect()
print(output)

# [Row(_1='Alice', _2=1)]
# [Row(name='Alice', age=1)]

基于rdd和ROW創建DataFrame

from pyspark.sql import Row


a = [('Alice', 1)]
rdd = sc.parallelize(a)
Person = Row("name", "age")
person = rdd.map(lambda r: Person(*r))
output = spark.createDataFrame(person).collect()
print(output)

# [Row(name='Alice', age=1)]

基于rdd和StructType創建DataFrame

from pyspark.sql.types import *

a = [('Alice', 1)]
rdd = sc.parallelize(a)
schema = StructType(
    [
        StructField("name", StringType(), True),
        StructField("age", IntegerType(), True)
    ]
)
output = spark.createDataFrame(rdd, schema).collect()
print(output)

# [Row(name='Alice', age=1)]

基于pandas DataFrame創建pyspark DataFrame

df.toPandas()可以把pyspark DataFrame轉換為pandas DataFrame。

df = spark.createDataFrame(rdd, ['name', 'age'])
print(df)  # DataFrame[name: string, age: bigint]

print(type(df.toPandas()))  # class 'pandas.core.frame.DataFrame'>

# 傳入pandas DataFrame
output = spark.createDataFrame(df.toPandas()).collect()
print(output)

# [Row(name='Alice', age=1)]

創建有序的DataFrame

output = spark.range(1, 7, 2).collect()
print(output)
# [Row(id=1), Row(id=3), Row(id=5)]

output = spark.range(3).collect()
print(output)
# [Row(id=0), Row(id=1), Row(id=2)]

通過臨時表得到DataFrame

spark.registerDataFrameAsTable(df, "table1")
df2 = spark.table("table1")
b = df.collect() == df2.collect()
print(b)
# True

配置DataFrame和臨時表

創建DataFrame時指定列類型

在createDataFrame中可以指定列類型,只保留滿足數據類型的列,如果沒有滿足的列,會拋出錯誤。

a = [('Alice', 1)]
rdd = sc.parallelize(a)

# 指定類型于預期數據對應時,正常創建
output = spark.createDataFrame(rdd, "a: string, b: int").collect()
print(output)  # [Row(a='Alice', b=1)]
rdd = rdd.map(lambda row: row[1])
print(rdd)  # PythonRDD[7] at RDD at PythonRDD.scala:53

# 只有int類型對應上,過濾掉其他列。
output = spark.createDataFrame(rdd, "int").collect()
print(output)   # [Row(value=1)]

# 沒有列能對應上,會拋出錯誤。
output = spark.createDataFrame(rdd, "boolean").collect()
# TypeError: field value: BooleanType can not accept object 1 in type class 'int'>

注冊DataFrame為臨時表

spark.registerDataFrameAsTable(df, "table1")
spark.dropTempTable("table1")

獲取和修改配置

print(spark.getConf("spark.sql.shuffle.partitions"))  # 200
print(spark.getConf("spark.sql.shuffle.partitions", u"10"))  # 10
print(spark.setConf("spark.sql.shuffle.partitions", u"50"))  # None
print(spark.getConf("spark.sql.shuffle.partitions", u"10"))  # 50

注冊自定義函數

spark.registerFunction("stringLengthString", lambda x: len(x))
output = spark.sql("SELECT stringLengthString('test')").collect()
print(output)
# [Row(stringLengthString(test)='4')]

spark.registerFunction("stringLengthString", lambda x: len(x), IntegerType())
output = spark.sql("SELECT stringLengthString('test')").collect()
print(output)
# [Row(stringLengthString(test)=4)]

spark.udf.register("stringLengthInt", lambda x: len(x), IntegerType())
output = spark.sql("SELECT stringLengthInt('test')").collect()
print(output)
# [Row(stringLengthInt(test)=4)]

查看臨時表列表

可以查看所有臨時表名稱和對象。

spark.registerDataFrameAsTable(df, "table1")
print(spark.tableNames())  # ['table1']
print(spark.tables())  # DataFrame[database: string, tableName: string, isTemporary: boolean]
print("table1" in spark.tableNames())  # True
print("table1" in spark.tableNames("default"))  # True

spark.registerDataFrameAsTable(df, "table1")
df2 = spark.tables()
df2.filter("tableName = 'table1'").first()
print(df2)  # DataFrame[database: string, tableName: string, isTemporary: boolean]

從其他數據源創建DataFrame

MySQL

前提是需要下載jar包。
Mysql-connector-java.jar

from pyspark import SparkContext
from pyspark.sql import SQLContext
import pyspark.sql.functions as F


sc = SparkContext("local", appName="mysqltest")
sqlContext = SQLContext(sc)
df = sqlContext.read.format("jdbc").options(
    url="jdbc:mysql://localhost:3306/mydata?user=rootpassword=mysql"
        "useUnicode=truecharacterEncoding=utf-8useJDBCCompliantTimezoneShift=true"
        "useLegacyDatetimeCode=falseserverTimezone=UTC ", dbtable="detail_data").load()
df.show(n=5)
sc.stop()

參考

RDD和DataFrame的區別
spark官方文檔 翻譯 之pyspark.sql.SQLContext

到此這篇關于pyspark創建DataFrame的幾種方法的文章就介紹到這了,更多相關pyspark創建DataFrame 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • pyspark 讀取csv文件創建DataFrame的兩種方法

標簽:黔西 鷹潭 黑龍江 四川 常德 益陽 惠州 上海

巨人網絡通訊聲明:本文標題《pyspark創建DataFrame的幾種方法》,本文關鍵詞  pyspark,創建,DataFrame,的,幾種,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《pyspark創建DataFrame的幾種方法》相關的同類信息!
  • 本頁收集關于pyspark創建DataFrame的幾種方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    另类小说欧美激情| 国产午夜精品在线观看| 久久国产精品色婷婷| 九九国产精品视频| 日本道色综合久久| 91麻豆精品国产91久久久更新时间 | 亚洲va中文字幕| 看国产成人h片视频| 成人激情电影免费在线观看| 欧美日韩亚洲另类| 国产精品国产三级国产普通话蜜臀| 在线欧美日韩国产| 国产精品免费人成网站| 国产成人a级片| 日韩免费性生活视频播放| 久久er99精品| 精品国产一区二区三区av性色 | 国产资源精品在线观看| 欧美电视剧免费全集观看| 天堂一区二区在线| 九一久久久久久| 日韩一区和二区| 日韩精品中文字幕一区| 国产精品亚洲第一| 国产精品国产三级国产aⅴ中文| 成人免费一区二区三区视频| 欧美性色黄大片| 蜜臀av一区二区在线免费观看| 麻豆视频一区二区| 中文av一区二区| 麻豆91在线观看| 国产人久久人人人人爽| 一区二区三区中文字幕电影| 成人看片黄a免费看在线| 日韩va亚洲va欧美va久久| 欧美羞羞免费网站| 99精品欧美一区二区三区小说| 欧美色视频在线| 国产乱理伦片在线观看夜一区| 一本大道久久a久久综合| 美日韩一区二区| 视频一区视频二区中文字幕| 久久免费午夜影院| 精品福利视频一区二区三区| 欧美日韩国产色站一区二区三区| 欧美极品美女视频| 麻豆传媒一区二区三区| 日本亚洲欧美天堂免费| 中文字幕一区二区不卡| 国产伦精品一区二区三区免费迷 | 天天影视涩香欲综合网| 日本一区二区电影| 精品国产一区二区三区av性色| 久久精品网站免费观看| 成人自拍视频在线观看| 欧美肥妇free| 国内精品久久久久影院薰衣草 | 成av人片一区二区| 麻豆精品蜜桃视频网站| 看电影不卡的网站| 日日摸夜夜添夜夜添亚洲女人| 热久久一区二区| 亚洲另类在线一区| 26uuu成人网一区二区三区| 欧美色图12p| 日韩欧美一二区| 日韩欧美国产精品一区| 91精品国产黑色紧身裤美女| 日韩国产成人精品| 国产在线播精品第三| www.欧美色图| 91精品国产综合久久久久久漫画 | 777久久久精品| 国产精品成人免费在线| 午夜激情一区二区| 一区二区三区国产精品| 日韩**一区毛片| av亚洲精华国产精华精华| 日本一区二区久久| 午夜精品久久久久久久久久 | 国产精品视频yy9299一区| 一区二区三区欧美日韩| 国产精品综合在线视频| 色综合久久久久综合体桃花网| 日韩av在线发布| 亚洲精品老司机| 午夜久久久久久| 欧美日本一道本| 日本aⅴ亚洲精品中文乱码| 91精品国产全国免费观看| 欧美日韩在线免费视频| 国产精品天干天干在观线| 欧美亚洲一区二区在线| 亚洲国产你懂的| 69成人精品免费视频| 亚洲成在人线在线播放| 成人av在线资源| 国产网站一区二区| 九色综合狠狠综合久久| 一区二区三区色| 欧美手机在线视频| 国内一区二区视频| 久久久精品黄色| 一本大道久久a久久综合| 国产成人综合精品三级| 国产女人aaa级久久久级| 琪琪久久久久日韩精品| 亚洲精品一区二区三区在线观看| 欧美一级午夜免费电影| 久久er99热精品一区二区| 欧美mv日韩mv| 亚洲gay无套男同| 日韩欧美国产午夜精品| 精品国产乱码久久久久久闺蜜| 国产精品久久久久一区二区三区共| 国产精品美女久久久久久2018| 美女诱惑一区二区| 一区二区三区蜜桃网| 成人av综合在线| 日韩精彩视频在线观看| 91麻豆福利精品推荐| 精品一区二区av| 一区二区成人在线视频| 国产精品理论在线观看| 91精品在线麻豆| 91免费国产视频网站| 国产精品白丝av| 午夜精品久久久久久久久久久 | 久久久久久久久蜜桃| 欧美一区二区三区的| 91丝袜美腿高跟国产极品老师| 欧美高清一级片在线| 欧美日本一区二区三区四区| 久久精品国内一区二区三区| 久久se精品一区精品二区| 精品一区二区精品| 亚洲伊人伊色伊影伊综合网| 欧美亚洲高清一区| 亚洲国产精品麻豆| 青草av.久久免费一区| 91九色最新地址| 欧美日韩综合在线| 99久久er热在这里只有精品66| 日韩国产成人精品| 久热成人在线视频| 99精品视频在线观看免费| 91精品国产综合久久久久久漫画 | 欧美一三区三区四区免费在线看 | 日韩欧美一区二区久久婷婷| 91精品国产全国免费观看| 亚洲国产wwwccc36天堂| 在线精品国精品国产尤物884a| 日韩一区二区视频| 成人动漫在线一区| 美女www一区二区| 国产999精品久久久久久| 欧美妇女性影城| 亚洲欧美福利一区二区| 国产精品99久久久久久似苏梦涵| 中文字幕免费一区| 国产一区二区h| 欧美一区二区三区免费观看视频| 亚洲va韩国va欧美va| 美国精品在线观看| k8久久久一区二区三区| 日韩欧美在线123| 日韩高清一级片| av资源站一区| 久久看人人爽人人| 老司机精品视频导航| 亚洲成人精品影院| 一本在线高清不卡dvd| 国产日产欧美一区| 国产成人亚洲精品青草天美| 国产亚洲一本大道中文在线| 欧美日免费三级在线| 午夜成人免费电影| 欧美日韩一卡二卡| 日本午夜精品视频在线观看| 成人精品鲁一区一区二区| 91麻豆精品国产91久久久 | 国产精品成人免费| 天天av天天翘天天综合网| 国产欧美精品一区aⅴ影院 | 久久精品网站免费观看| 久久精品一二三| 亚洲丰满少妇videoshd| 久久久久久毛片| 这里是久久伊人| 99v久久综合狠狠综合久久| 久久精品国产澳门| 亚洲国产另类av| 国产精品久久影院| 久久影院视频免费| 亚洲妇熟xx妇色黄| 在线观看日韩精品| 大尺度一区二区| www国产精品av| 欧美视频在线一区| 成人国产亚洲欧美成人综合网 |