精华内容
下载资源
问答
  • PySpark数据框中添加的5种方法

    千次阅读 2020-04-28 16:44:28
    每天都在生成太多数据。 尽管有时我们可以使用Rapids或Parallelization等工具来管理大数据,但如果您使用的是TB级数据,Spark是个很好的工具。 尽管这篇文章解释了如何使用RDD和...如何在Spark创建新? 现在,...

    每天都在生成太多数据。

    尽管有时我们可以使用Rapids或Parallelization等工具来管理大数据,但如果您使用的是TB级数据,Spark是一个很好的工具。

    尽管这篇文章解释了如何使用RDD和基本的Dataframe操作,但是我在使用PySpark Dataframes时错过了很多东西。

    只有当我需要更多功能时,我才阅读并提出多种解决方案来做一件事情。

    如何在Spark中创建新列?

    现在,这听起来微不足道,但请相信我,事实并非如此。 您可能想要处理这么多数据,所以我很确定您最终将在工作流中使用大多数这些列创建过程。 有时使用Pandas功能,有时使用基于RDD的分区,有时使用成熟的python生态系统。

    这篇文章将是关于"在Pyspark Dataframe中创建新列的多种方法"。

    如果您安装了PySpark,则可以跳过下面的"入门"部分。

    Spark入门

    我知道很多人不会在系统中安装Spark来尝试和学习。 但是安装Spark本身就是一件令人头疼的事情。

    由于我们想了解它是如何工作的以及如何使用它,因此建议您在此处与社区版一起在线使用Databricks上的Spark。 不用担心,它是免费的,尽管资源较少,但是对于我们来说,出于学习目的,它现在就适用。

    file

    一旦注册并登录,将显示以下屏幕。

    file

    您可以在此处启动新笔记本。

    选择Python笔记本,并为笔记本命名。

    启动新笔记本并尝试执行任何命令后,笔记本将询问您是否要启动新群集。 做吧

    下一步将检查sparkcontext是否存在。 要检查sparkcontext是否存在,您必须运行以下命令:

    sc

    file

    这意味着我们已经设置了可以运行Spark的笔记本。

    数据

    在这里,我将处理Movielens ml-100k.zip数据集。 1000位用户观看1700部电影时获得100,000个评分。 在此压缩文件夹中,我们将专门使用的文件是评估文件。 该文件名保留为" u.data"

    如果要上载此数据或任何数据,可以单击左侧的"数据"选项卡,然后使用提供的GUI添加数据。

    file

    然后,我们可以使用以下命令加载数据:

    ratings = spark.read.load("/FileStore/tables/u.data",format="csv", sep="\t", inferSchema="true", header="false")
    ratings = ratings.toDF(*['user_id', 'movie_id', 'rating', 'unix_timestamp'])

    外观如下:

    ratings.show()

    file

    好的,现在我们准备开始我们感兴趣的部分。 如何在PySpark Dataframe中创建一个新列?

    使用Spark本机函数

    在PySpark DataFrame中创建新列的最pysparkish方法是使用内置函数。 这是创建新列的最高效的编程方式,因此,这是我想进行某些列操作时首先要去的地方。

    我们可以将.withcolumn与PySpark SQL函数一起使用来创建新列。 本质上,您可以找到已经使用Spark函数实现的String函数,Date函数和Math函数。 我们可以将spark函数导入为:

    import pyspark.sql.functions as F

    我们的第一个函数F.col函数使我们可以访问列。 因此,如果我们想将一栏乘以2,可以将F.col用作:

    ratings_with_scale10 = ratings.withColumn("ScaledRating", 2*F.col("rating"))
    ratings_with_scale10.show()

    file

    我们还可以使用数学函数,例如F.exp函数:

    ratings_with_exp = ratings.withColumn("expRating", 2*F.exp("rating"))
    ratings_with_exp.show()

    file

    此模块中提供了许多其他功能,足以满足大多数简单的用例。 您可以在此处查看功能列表。

    Spark UDF

    有时我们想对一列或多列做复杂的事情。 可以将其视为对PySpark数据框到单列或多列的映射操作。 尽管Spark SQL函数确实解决了许多有关创建列的用例,但只要我想使用更成熟的Python功能时,我都会使用Spark UDF。

    要使用Spark UDF,我们需要使用F.udf函数将常规的python函数转换为Spark UDF。 我们还需要指定函数的返回类型。 在此示例中,返回类型为StringType()

    import pyspark.sql.functions as F
    from pyspark.sql.types import *
    
    def somefunc(value): 
        if value < 3: 
          return 'low' 
        else: 
          return 'high'
    
    #convert to a UDF Function by passing in the function and return type of function 
    udfsomefunc = F.udf(somefunc, StringType())
    ratings_with_high_low = ratings.withColumn("high_low", udfsomefunc("rating"))
    ratings_with_high_low.show()

    file

    使用RDD

    有时,Spark UDF和SQL函数对于特定用例而言都是不够的。 您可能想利用Spark RDD获得的更好的分区。 或者,您可能想在Spark RDD中使用组函数。 您可以使用此方法,主要是在需要访问python函数内部spark数据框中的所有列时。

    无论如何,我发现使用RDD创建新列的这种方式对于有经验的RDD(这是Spark生态系统的基本组成部分)的人们非常有用。

    下面的过程利用该功能在Row和pythondict对象之间进行转换。 我们将行对象转换为字典。 按照我们的习惯使用字典,然后将该字典再次转换回行。

    import math
    from pyspark.sql import Row
    
    def rowwise_function(row): 
        # convert row to dict: 
      row_dict = row.asDict() 
        # Add a new key in the dictionary with the new column name and value. 
      row_dict['Newcol'] = math.exp(row_dict['rating']) 
        # convert dict to row: 
      newrow = Row(**row_dict) 
        # return new row 
      return newrow
    
    # convert ratings dataframe to RDD
    ratings_rdd = ratings.rdd
    # apply our function to RDD
    
    ratings_rdd_new = ratings_rdd.map(lambda row: rowwise_function(row))
    
    # Convert RDD Back to DataFrame
    ratings_new_df = sqlContext.createDataFrame(ratings_rdd_new)
    ratings_new_df.show()

    file

    Pandas UDF

    Spark版本2.3.1中引入了此功能。 这使您可以在Spark中使用Pands功能。 我通常在需要在Spark数据帧上运行groupby操作或需要创建滚动功能并想使用Pandas滚动功能/窗口功能的情况下使用它。

    我们使用它的方式是使用F.pandas_udf装饰器。 我们在这里假设该函数的输入将是一个熊猫数据框。 我们需要从该函数依次返回一个Pandas数据框。

    这里唯一的复杂性是我们必须为输出数据框提供一个架构。 我们可以使用以下格式来实现。

    # Declare the schema for the output of our function
    outSchema = StructType([StructField('user_id',IntegerType(),True),StructField('movie_id',IntegerType(),True),StructField('rating',IntegerType(),True),StructField('unix_timestamp',IntegerType(),True),StructField('normalized_rating',DoubleType(),True)])
    # decorate our function with pandas_udf decorator
    @F.pandas_udf(outSchema, F.PandasUDFType.GROUPED_MAP)
    def subtract_mean(pdf):
        # pdf is a pandas.DataFrame
        v = pdf.rating
        v = v - v.mean()
        pdf['normalized_rating'] =v
        return pdf
    rating_groupwise_normalization = ratings.groupby("movie_id").apply(subtract_mean)
    rating_groupwise_normalization.show()

    file

    我们还可以利用它在每个火花节点上训练多个单独的模型。 为此,我们复制数据并为每个复制提供一个键和一些训练参数,例如max_depth等。然后,我们的函数将使用熊猫Dataframe,运行所需的模型,然后返回结果。 结构如下所示。

    # 0. Declare the schema for the output of our function
    outSchema = StructType([StructField('replication_id',IntegerType(),True),StructField('RMSE',DoubleType(),True)])
    # decorate our function with pandas_udf decorator
    @F.pandas_udf(outSchema, F.PandasUDFType.GROUPED_MAP)
    def run_model(pdf):
        # 1. Get hyperparam values
        num_trees = pdf.num_trees.values[0]
        depth = pdf.depth.values[0]
        replication_id = pdf.replication_id.values[0]
        # 2. Train test split
        Xtrain,Xcv,ytrain,ycv = train_test_split.....
        # 3. Create model using the pandas dataframe
        clf = RandomForestRegressor(max_depth = depth, num_trees=num_trees,....)
        clf.fit(Xtrain,ytrain)
        # 4. Evaluate the model
        rmse = RMSE(clf.predict(Xcv,ycv)
        # 5. return results as pandas DF
        res =pd.DataFrame({'replication_id':replication_id,'RMSE':rmse})
        return res
    
    results = replicated_data.groupby("replication_id").apply(run_model)

    以上只是一个想法,而不是一个有效的代码。 尽管应该稍作修改。

    使用SQL

    对于喜欢SQL的人,甚至可以使用SQL创建列。 为此,我们需要注册一个临时SQL表,然后使用带有附加列的简单选择查询。 一个人也可以用它来进行联接。

    ratings.registerTempTable('ratings_table')
    newDF = sqlContext.sql('select *, 2*rating as newCol from ratings_table')
    newDF.show()

    file

    希望我已经很好地介绍了列创建过程,以帮助您解决Spark问题。

    文源网络,仅供学习之用,侵删。

    在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会! https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》

    关注公众号【Python圈子】,优质文章每日送达。

    file

    展开全文
  • 就是当list没有数据时,也有线,而非空白的一片,给list设置了固定的高度,三。1111111111111111111111
  • 上篇文章,我们可以动态生成GridView的绑定数据列BoundField和命令CommandField,现在说说如何动态生成GridView的模版TemplateField,并模版TemplateField中添加复选CheckBox首先,第步,创建个类...

    上篇文章,我们可以动态生成GridView的绑定数据列BoundField和命令列CommandField,现在说说如何动态生成GridView的模版列TemplateField,并在模版列TemplateField中添加复选框CheckBox

    首先,第一步,创建一个类MyTemplate.cs

    public class MyTemplate:ITemplate
    {
        
    private string strColumnName;
        
    private DataControlRowType dcrtColumnType;

        
    public MyTemplate()
        
    {
            
    //
            
    // TODO: 在此处添加构造函数逻辑
            
    //
        }


        
    /// <summary>
        
    /// 动态添加模版列
        
    /// </summary>
        
    /// <param name="strColumnName">列名</param>
        
    /// <param name="dcrtColumnType">列的类型</param>

        public MyTemplate(string strColumnName, DataControlRowType dcrtColumnType)
        
    {
            
    this.strColumnName = strColumnName;
            
    this.dcrtColumnType = dcrtColumnType;
        }


        
    public void InstantiateIn(Control ctlContainer)
        
    {
            
    switch (dcrtColumnType)
            
    {
                
    case DataControlRowType.Header: //列标题
                    Literal ltr = new Literal();
                    ltr.Text 
    = strColumnName;
                    ctlContainer.Controls.Add(ltr);
                    
    break;
                
    case DataControlRowType.DataRow: //模版列内容——加载CheckBox 
                    CheckBox cb = new CheckBox();
                    cb.ID 
    = "CheckBox1";
                    cb.Checked 
    = false;
                    ctlContainer.Controls.Add(cb);
                    
    break;
            }

        }


    }

    第二步,在绑定GridView方法中,生成模版列

    /// <summary>
        
    /// 绑定生成GridView
        
    /// </summary>
        
    /// <param name="gdv">要绑定的GridView</param>
        
    /// <param name="dtblDataSource">GridView的数据源</param>
        
    /// <param name="strDataKey">GridView的DataKeyNames</param>

        public static void GridViewBind(GridView gdv, DataTable dtblDataSource, string strDataKey)
        
    {
            gdv.Columns.Clear();

            gdv.AutoGenerateColumns 
    = false;
            gdv.DataSource 
    = dtblDataSource;
            gdv.DataKeyNames 
    = new string[] { strDataKey };

            TemplateField tfColumn 
    = new TemplateField();
            tfColumn.ItemTemplate 
    = new MyTemplate("", DataControlRowType.DataRow);
            gdv.Columns.Add(tfColumn);

           
    //………………

            gdv.DataBind();
        }

    这样模版列也可以动态生成啦!

    展开全文
  • 首先,pl/sql developer编辑新建的表,新建个字段为clob,保存后再将另外个字段删除,点击保存,再修改刚才添加的字段名为删除的字段名,保存即可。 删除方法:ALTER TABLE 表名 DROP COLUMN 列名; ...

    1.修改oracle数据库表中已有字段数据类型为clob

      首先,在pl/sql developer中编辑新建的表,新建一个字段为clob,保存后再将另外一个字段删除,点击保存,再修改刚才添加的字段名为删除的字段名,保存即可。

    删除列方法:ALTER TABLE 表名 DROP COLUMN 列名;

    附赠就剁手淘宝天猫内部优惠券

    转载于:https://www.cnblogs.com/doublegi/p/6546834.html

    展开全文
  • easyui如何在datagrid添加超链接

    千次阅读 2017-10-13 18:56:59
    一个项目,有这样一个需求,就是利用easyui框架为每一个行上的某一个格添加一个超链接,如下图: 在案号那一列,每一行都是的这个案号都是一个超链接,平时我们都是通过field,绑定从后台获取的数据,...

    在一个项目中,有这样一个需求,就是利用easyui框架为每一个行上的某一个格添加一个超链接,如下图:

    在案号那一列,每一行都是的这个案号都是一个超链接,平时我们都是通过field,绑定从后台获取的数据,如果没有什么特殊要求的话,就可以用了,但是要对数据的格式,还有属性(比如添加一些超链接),这就要用到easyui里面自带的一个formatter属性,它的值是一个函数,函数里有三个参数,分别是value,row,index。下面来介绍一下这几个参数:

    1、value:是当前field绑定数据的值,比如,我当前这个field绑定的是一个名为id的属性,那么这个value的就是当前行上的这个id的值

    2、rowData:当前这一行上的所有数据,包括显示的和未显示的

    3、index:当前是第几行的行值

     

    那这个函数怎么样用呢?下面就我本次 的项目做个简单的介绍:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function getMoreRecent(){
                $('#filedGrid').datagrid({
                title:"立案秘书收到的案子",
                url:"/arbcase/api/pageClickLog/recentCaseTopList",
                columns:[[
                {field:'collectNo',title:'案号',width:100,
                formatter: function(value,row,index){
            return '<a style="color:blue" href="/arbcase/case-'+row.id+'">'+row.collectNo+'</a>';
         } },
                {field:'nature',title:'案由',width:100},
                {field:'accuserListText',title:'申请人',width:100},
                {field:'appelleListText',title:'被申请人',width:100},
                {field:'createdDatetimeText',title:'录入时间',width:50}
                ]]
                });
        }

    上面代码的特点就是就是,url是可以通过变量传入的,第二列的行数也是可以自动设置的,同时可以对每一列的数据格式进行转换,像我这个就是返回一个超链接,大概就是这样了


    文章引用http://www.cnblogs.com/baby-lijun/p/5152159.html

    展开全文
  • SSM框架+MySQL使用伪

    2020-04-26 09:48:50
    SSM框架+MySQL使用伪 查询数据库的时候,我们有时候需要对...那么我们使用MySQL的时候,如何数据添加呢? 首先我们可以设置个变量 @rownum SET @rownum:=0; 接下来就可以查询方法让变量自增1 SEL...
  •  接下来,我们将创建一个测试数据框,其中包含一列名称和相应的测试分数:    使用pandas方法绘制此数据帧很简单。我们可以使用该DataFrame.plot.bar()方法两行生成条形图。    这给了我们即时...
  • matlab代码fnames iHMMSPT 单粒子轨迹的无限隐马尔可夫模型:种非参数贝叶斯框架,用于估计状态数,扩散率和过渡...[...]为向量,则最终数据应为个膨胀的向量。 MATLAB代码:xyz = [x; y; [z]加载并处
  • tree = ttk.Treeview(root, show="headings") #表格第一列不显示 tree.grid(row=1, columnspan=2) tree["columns"] = ("序号", "企业名称", "详细信息") # 设置列,不显示 tree.column("序号", width=100) tree...
  • 广仲的一个项目,有这样一个需求,就是利用easyui框架为每一个行上的某一个格添加一个超链接,如下图: 在案号那一列,每一行都是的这个案号都是一个超链接,平时我们都是通过field,绑定从后台获取的数据,...
  • 第三步:在数据选择平面文件源,并将文件通过点击浏览之后选择csv文件进行添加,然后在“在第个数据行内显示名称”这行文字前面的方框进行取消选择 点击浏览之后会出现这个界面 第四步:选择最左边...
  • 今天macw小编带来如何在原型Axure9体现模糊搜索效果。 一、实现逻辑 1、当输入框的值为空时,下面的数据项不...选中中继器,在样式,为中继器添加默认的数据,在这一列填充自己想要的数据项。 三、交互实现 选
  • 在数据分析中将数据帧传递给函数是个普遍的问题,而没有清楚地知道是否包含哪些,并且随着将列添加到输入数据或从输入数据删除,代码可能会以意想不到的方式中断。 使用dataenforce ,您可以为函数提供清晰...
  • 固定第一列 setFixedFirstColumn//1.4版本取消了 可以使用Column.setFixed 固定任意列。 20. 固定统计行 setFixedCountRow 21. 列标题上下padding setColumnTitleVerticalPadding 22. 增加列标题左右padding ...
  • 说明:本课程用到个员工信息表,员工信息表没有编号,看起来就比较杂乱,通过本课程学习如何在报表给数据集编号。步骤添加数据源从数据库取出表格“员工信息”作为数据源,在数据源区点击,在数据集获取...
  • Birt中文手册.chm

    热门讨论 2011-05-27 17:34:23
    如何在数据集级别进行过滤 如何在报告元素级别进行过滤 如何在组级别进行过滤 使用户能够对数据进行过滤 使用户能够在查询运行时进行过滤 如何创建简单报告参数 如何在 SQL 查询插入参数标记 如何创建数据...
  • 课程十一:如何制作子报表说明:对于子报表,主要是用来在同个页面显示中嵌入不同页面的信息步骤:创建个子表步骤二:在sheet2表格中添加数据源,在数据源区点击,在弹出来的数据集获取语句获取中输入:select...
  • 步骤二:在sheet2表格中添加数据源,在数据源区点击,在弹出来的数据集获取语句获取中输入:“select * from 销量”,加入销量表加为数据源ds1。 在工作栏中做出表格,把需要的数据集从左边的数据源区拖入工作...
  • 数据框 这是个C ++统计库,提供类似于Python的Pandas包的接口。 个DataFrame可以具有个索引和许多内置或用户定义类型的数据。 您可以采用许多不同的方式对数据进行切片。 您可以加入,合并,分组数据。 ...
  • 先看效果: 是不是有点意思啊。好,咱们看看如何实现这样的效果。... 步骤二:建立个图片查询工作表,在A2单元格设置数据有效性,在数据有效性的允许序列中添加图片资料库的产品名称单元格区域: 按Ctrl+
  • 9.3.2 添加一数据 9.3.3 保存修改结果 9.3.4 验证EditGrid数据 9.3.5 限制输入数据的类型 9.4 PropertyGrid属性表格控件 9.4.1 PropertyGrid简介 9.4.2 只读的PropertyGrid 9.4.3 对name强制排序并...
  • birt中文帮助文档

    2011-09-17 10:38:09
    如何在数据集级别进行过滤 如何在报告元素级别进行过滤 如何在组级别进行过滤 第十二章、使用户能够对数据进行过滤 使用户能够在查询运行时进行过滤 如何创建简单报告参数 如何在 SQL 查询插入参数标记 如何创建...
  • 9.3.2 添加一数据 9.3.3 保存修改结果 9.3.4 验证EditGrid数据 9.3.5 限制输入数据的类型 9.4 PropertyGrid属性表格控件 9.4.1 PropertyGrid简介 9.4.2 只读的PropertyGrid 9.4.3 对name强制排序并...
  • 样品集成适配器 介绍: 集成适配器是个通过服务器将后端系统连接到移动... 示例集成适配器是个 maven Web 项目,所有依赖项都列在 pom.xml 文件。 配置示例集成适配器: 集成适配器的配置可以文件src/main
  • 如何固定表头:鼠标选定B1单元格(可... 可设置项添加: (1)首先Excel设计好所需要的表格,任意一列中输入要下拉列表所显示的内容,然后选定要使用选择性输入的区域。 (2)单击“数据→有效性”命...
  • 10.5 案例学习:借助个组合将两个数据透视表同步 208 10.6 下一步 213 第11章 使用VBA创建数据透视表 215 11.1 VBA简介 215 11.1.1 Excel启用VBA 215 11.1.2 启用开发工具功能 216 11.1.3 ...
  • 10.5 案例学习:借助个组合将两个数据透视表同步 208 10.6 下一步 213 第11章 使用VBA创建数据透视表 215 11.1 VBA简介 215 11.1.1 Excel启用VBA 215 11.1.2 启用开发工具功能 216 11.1.3 ...
  • 10.5 案例学习:借助个组合将两个数据透视表同步 208 10.6 下一步 213 第11章 使用VBA创建数据透视表 215 11.1 VBA简介 215 11.1.1 Excel启用VBA 215 11.1.2 启用开发工具功能 216 11.1.3 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 444
精华内容 177
关键字:

如何在数据框中添加一列