添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
case class Salary(depName: String, empNo: Long, name: String, 
    salary: Long, hobby: Seq[String])
val df = Seq(
  Salary("sales",     1,  "Alice",  5000, List("game",  "ski")),
  Salary("personnel", 2,  "Olivia", 3900, List("game",  "ski")),
  Salary("sales",     3,  "Ella",   4800, List("skate", "ski")),
  Salary("sales",     4,  "Ebba",   4800, List("game",  "ski")),
  Salary("personnel", 5,  "Lilly",  3500, List("climb", "ski")),
  Salary("develop",   7,  "Astrid", 4200, List("game",  "ski")),
  Salary("develop",   8,  "Saga",   6000, List("kajak", "ski")),
  Salary("develop",   9,  "Freja",  4500, List("game",  "kajak")),
  Salary("develop",   10, "Wilma",  5200, List("game",  "ski")),
  Salary("develop",   11, "Maja",   5200, List("game",  "farming"))).toDS
df.createTempView("empsalary")
df.show()

获取前n行

  1. 使用limit(n)

使用limit可以得到dataframe的前n行,并且返回的是一个dataframe。

scala> df.limit(1).show()
+-------+-----+-----+------+-----------+
|depName|empNo| name|salary|      hobby|
+-------+-----+-----+------+-----------+
|  sales|    1|Alice|  5000|[game, ski]|
+-------+-----+-----+------+-----------+
scala> df.limit(1)
res15: org.apache.spark.sql.Dataset[Salary] = [depName: string, empNo: bigint ... 3 more fields]
  1. 使用take(n)或head(n)

这两个函数返回的是一个数组。

scala> df.head(1)
res16: Array[Salary] = Array(Salary(sales,1,Alice,5000,List(game, ski)))
scala> df.take(1)
res19: Array[Salary] = Array(Salary(sales,1,Alice,5000,List(game, ski)))

获取后n行

  1. 使用tail函数(>spark-3.0)

  2. 反向排序后取第一条

scala> df.orderBy(desc("empNo")).show(1)
+-------+-----+----+------+---------------+
|depName|empNo|name|salary|          hobby|
+-------+-----+----+------+---------------+
|develop|   11|Maja|  5200|[game, farming]|
+-------+-----+----+------+---------------+
  1. 使用reduce算子
df.reduce { (x, y) => 
  if (x.empNo> y.empNo) x else y 

输出结果:

res43: Salary = Salary(develop,11,Maja,5200,List(game, farming))

本文介绍了如何获取dataframe的前n行和后n行的方法。

a.loc[‘one’,‘a’]与a.loc[[‘one’],[‘a’]]作用是一样的,不过者只显示对应的值,而后者会显示对应的和列标签。a.loc[[‘one’,‘two’],[‘a’,‘b’]] 表示选取’one’和’two’这两以及columns为a,b的列;a1[a1[‘one’].isin([‘2’,‘3’])] 表显示满足条件:列one中的值包含’2’,'3’的所有。a.x与a[‘x’]意思一样。a.loc[:,[‘a’,‘b’] ] 表示选取所有的以及columns为a,b的列; DataFrame是一个组织成命名列的数据集。它在概念上等同于关系数据库中的表或R/Python中的数据框架,但其经过了优化。DataFrames可以从各种各样的源构建,例如:结构化数据文件,Hive中的表,外部数据库或现有RDD。 DataFrame API 可以被Scala,Java,Python和R调用。 在Scala和Java中,DataFrame由Rows的数据集表示。 在Scala API中,DataFrame只是一个类型别名Dataset[Row]。而在Java API中,用户需要Dataset用来表示DataFrame。 在本文档中,我们经常将Scala/Java数据 在做实验时候需要读取DataFrame的某一列的值,我想要得到的是’>=50k’这个结果,原来的代码为 b = str(data['income'].head(1)) 但是其输出为: 0 <=50K Name: income, dtype: object 再进下面的判断 la='<=50K' lb='>50K' la_result=la in b lb_result=lb in b 显然la_res from sqlalchemy import create_engine import cx_Oracle db=cx_Oracle.connect('userid','password','10.10.1.10:1521/dbinstance') print db.version cr=db.cursor()\nsql='select * from sys_user' cr.execute(sql) rs=cr.fetchall() zz=pd.DataFram 1、df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111′,’B’:’121′},{‘A’:’1111′,’B’:’1211′}]) print df.columns.size#列数 2 print df.iloc[:,0].size#数 3 print df.ix[[0]].index.values[0]#索引值 0 print df.ix[[0]].values[0][0]#第一第一列的值 11 print df.ix[[1]].values[0][1]#第二第二列的值 121 以上这篇python DataFrame获取数、列数、索引及第几 拯救pandas计划(5)——获取DataFrame分组topN数据最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数据操作库,身为一个数据工作者,基本上是张口pandas,闭口pandas了,故而写下此系列以让更多的小伙伴们爱上pandas。系列文章说明:系列名(系列文章序号)——此次系列文章具体解决的需求平台:windows 10python 3....