婷婷综合国产,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
    7777精品伊人久久久大香线蕉超级流畅 | 亚洲成人综合视频| 亚洲欧美日韩一区| 自拍偷拍国产亚洲| 一区二区三区四区高清精品免费观看| 国产三级久久久| 日本一区二区三区国色天香 | 色噜噜夜夜夜综合网| eeuss鲁片一区二区三区在线看| 国产麻豆精品在线| 国产成人av福利| 99精品热视频| 欧美午夜精品久久久久久孕妇| 91影院在线观看| 欧美午夜精品一区| 欧美一区二区三区性视频| 精品国产1区2区3区| 亚洲国产成人午夜在线一区| 亚洲国产高清aⅴ视频| 亚洲欧美偷拍卡通变态| 亚洲一区二区欧美激情| 天堂一区二区在线免费观看| 国产一区二区中文字幕| 成人免费视频caoporn| 欧美色老头old∨ideo| 精品久久久久av影院| 最新国产精品久久精品| 午夜精品免费在线| 国产高清精品网站| 欧美日韩国产一级| 26uuu亚洲综合色欧美| 亚洲另类在线制服丝袜| 免费人成在线不卡| 成人av影院在线| 日韩美女视频一区二区在线观看| 国产精品久久久久久久裸模| 天堂一区二区在线| 99re视频精品| 欧美成人vps| 亚洲国产精品久久艾草纯爱 | 国产精品视频免费看| 日韩专区一卡二卡| 99精品在线免费| 日韩三级精品电影久久久| 亚洲伦理在线免费看| 国产一区二区精品在线观看| 欧美日韩亚洲高清一区二区| 国产欧美日韩在线| 精品一区二区在线看| 日本韩国欧美一区| 亚洲国产精品黑人久久久| 免费av网站大全久久| 色激情天天射综合网| 欧美激情在线一区二区| 九九**精品视频免费播放| 欧洲一区二区三区在线| 中文字幕佐山爱一区二区免费| 国产在线看一区| 日韩精品专区在线影院重磅| 亚洲线精品一区二区三区| 成人听书哪个软件好| 久久久噜噜噜久噜久久综合| 婷婷综合久久一区二区三区| 日本高清不卡aⅴ免费网站| 国产精品美女一区二区三区| 国产精品综合久久| 国产色产综合色产在线视频| 经典三级一区二区| 日韩一级二级三级| 免费三级欧美电影| 日韩午夜在线播放| 国内国产精品久久| 久久婷婷色综合| 成人性生交大合| 国产精品国产精品国产专区不蜜| 国产一区二区福利| 欧美国产日韩一二三区| 国产夫妻精品视频| 国产精品超碰97尤物18| 成人精品视频网站| 一区二区三区精品视频在线| 色婷婷av久久久久久久| 性做久久久久久久免费看| 欧美日韩精品一区二区三区四区 | 亚洲精品一区二区三区福利| 美女视频黄免费的久久| 亚洲精品一区二区三区香蕉| 成人免费视频一区| 一区二区三区在线视频观看| 欧美日韩高清一区二区三区| 奇米影视一区二区三区| 久久久久久日产精品| 国产.欧美.日韩| 国产精品福利一区| 欧美高清视频一二三区| 精品一区二区三区在线视频| 国产欧美日韩视频一区二区 | 日韩一级视频免费观看在线| 精品一区二区三区在线播放视频 | 欧美无砖砖区免费| 日韩电影一二三区| 欧美经典三级视频一区二区三区| 一本色道**综合亚洲精品蜜桃冫 | 精品av综合导航| 成人少妇影院yyyy| 天天做天天摸天天爽国产一区| 精品久久国产老人久久综合| 色哟哟国产精品| 久久福利视频一区二区| 国产精品色哟哟网站| 欧美精品久久99久久在免费线 | 在线观看日韩电影| 黑人巨大精品欧美一区| 一区二区三区高清不卡| 精品动漫一区二区三区在线观看| 91日韩在线专区| 国产一区二区三区在线看麻豆| 亚洲自拍偷拍av| 国产精品黄色在线观看| 欧美成人三级电影在线| 欧美日韩在线播放三区| 成人动漫一区二区| 极品尤物av久久免费看| 亚洲二区视频在线| 亚洲色图清纯唯美| 国产日产亚洲精品系列| 欧美成va人片在线观看| 欧美午夜精品理论片a级按摩| av在线一区二区| 国产传媒欧美日韩成人| 国模少妇一区二区三区| 日韩av一区二区三区| 亚洲国产毛片aaaaa无费看| 中文字幕中文乱码欧美一区二区| 精品卡一卡二卡三卡四在线| 欧美精品九九99久久| 欧美日韩一区国产| 日本韩国欧美一区二区三区| 一本一道综合狠狠老| 99精品1区2区| 91麻豆国产自产在线观看| 成人伦理片在线| 国产91对白在线观看九色| 成人午夜伦理影院| 成人黄色在线网站| 成人免费高清在线观看| 顶级嫩模精品视频在线看| 国产精品亚洲一区二区三区妖精| 另类小说综合欧美亚洲| 精品一区二区国语对白| 国产在线精品一区在线观看麻豆| 精品一区二区三区在线视频| 国产麻豆精品在线| 不卡一卡二卡三乱码免费网站 | 亚洲欧美中日韩| 国产精品电影一区二区| 最近日韩中文字幕| 亚洲一二三四在线观看| 婷婷成人激情在线网| 久久成人羞羞网站| 国产一区在线精品| caoporn国产精品| 色综合久久久久综合体桃花网| 欧美三级电影在线看| 欧美大白屁股肥臀xxxxxx| 精品成人免费观看| 中文字幕一区二区三区色视频 | 日韩欧美一区二区在线视频| 欧美一区二区三区影视| 国产视频不卡一区| 亚洲欧美日本韩国| 午夜欧美视频在线观看| 免费成人av在线| av成人老司机| 欧美日韩精品一区二区三区| 日韩欧美电影在线| 国产精品美女久久福利网站| 一区二区三区在线视频观看58 | 欧美高清视频不卡网| 欧美不卡在线视频| 亚洲欧美日韩在线| 蜜臀av一区二区在线观看| 成人av手机在线观看| 欧美电影影音先锋| 国产精品福利一区| 久久99国产精品久久| 色婷婷精品久久二区二区蜜臀av | 国产精品中文字幕欧美| 色综合久久久久久久久| 久久先锋影音av鲁色资源网| 亚洲制服丝袜在线| 国产成人免费视频| 欧美成人一级视频| 亚洲国产一区二区三区青草影视| 久久99久久久久| 欧美色倩网站大全免费| 日韩理论片在线| 国产乱妇无码大片在线观看| 欧美日韩一区精品| 综合久久久久综合|