小编Ste*_*anK的帖子

Zeppelin - 无法用%sql查询我在pyspark注册的表

我是spark/zeppelin的新手,我想完成一个简单的练习,在那里我将csv文件从pandas转换为Spark数据框,然后注册表以使用sql查询它并使用Zeppelin将其可视化.

但我似乎在最后一步失败了.

我使用的是Spark 1.6.1

这是我的代码:

%pyspark
spark_clean_df.registerTempTable("table1")
print spark_clean_df.dtypes
print sqlContext.sql("select count(*) from table1").collect()
Run Code Online (Sandbox Code Playgroud)

这是输出:

[('id', 'bigint'), ('name', 'string'), ('host_id', 'bigint'), ('host_name', 'string'), ('neighbourhood', 'string'), ('latitude', 'double'), ('longitude', 'double'), ('room_type', 'string'), ('price', 'bigint'), ('minimum_nights', 'bigint'), ('number_of_reviews', 'bigint'), ('last_review', 'string'), ('reviews_per_month', 'double'), ('calculated_host_listings_count', 'bigint'), ('availability_365', 'bigint')]
[Row(_c0=4961)]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用%sql时,我收到此错误:

%sql
select * from table1

Table not found: table1; line 1 pos 14
set zeppelin.spark.sql.stacktrace = true to see full stacktrace
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激 - 我甚至不知道在哪里可以找到这个堆栈跟踪,它怎么能帮助我.

谢谢 :)

apache-spark apache-spark-sql pyspark apache-zeppelin

7
推荐指数
1
解决办法
7801
查看次数

仅在单击 Shiny 中的操作按钮后才更新服务器上的内容

我在 R 中闪亮的服务器中遇到反应输出问题。

我想要做的是创建一个使用基于输入计算的值的绘图。

仅在单击提交/完成按钮后才必须更新输出,并且必须根据需要多次计算输出。

我设法做的是独立于提交按钮更新内容(提交按钮根本没有功能),并且在我更改 1 个值后立即更改了绘图。

我想要做的是仅在指定我想要的所有参数值后更改绘图。

这是我的 ui.R 代码的最小示例:

    shinyUI(fluidPage(
      titlePanel("Wages in Year 2016 for Czech Republic in CZK"),
       sidebarPanel(

      conditionalPanel(condition = "input.conditionedPanels==7",
                 selectInput("Age", "Age", choices = vek_mod$Vek, selected = "23-27"),
                 selectInput("ChosenSex", "Your sex", choices = pohlavi_mod$Pohlavie, selected = "Zena"),
                 actionButton("Button", "Done"),
                 p("Click so changes will take effect.")
      ),
        mainPanel(
         tabsetPanel(
           ...
            tabPanel("Minimal_Example", textOutput("Minimal_Example"), value = 7)
            ...
            , id = "conditionedPanels"
    )
   )
  )
 )
Run Code Online (Sandbox Code Playgroud)

这是 server.R 代码:

...
  output$Minimal_Example <- renderPrint({

    Age <- input$Age
    Sex …
Run Code Online (Sandbox Code Playgroud)

r shiny plotly

6
推荐指数
1
解决办法
2947
查看次数

可以使用shapely和rtree在大数据集上找到最接近每个点的直线

我有一个简化的城市地图,其中的街道为线串,地址为点。我需要找到从每个点到任何一条街线的最近路径。我有一个执行此操作的脚本,但由于嵌套了循环,因此它在多项式时间内运行。对于15万行(形状为LineString)和10000点(形状为Point),在8 GB Ram计算机上需要10个小时才能完成。

该函数如下所示(抱歉,无法完全重现):

import pandas as pd
import shapely
from shapely import Point, LineString

def connect_nodes_to_closest_edges(edges_df , nodes_df,
                                   edges_geom,
                                   nodes_geom):
    """Finds closest line to points and returns 2 dataframes:
        edges_df
        nodes_df
    """
    for i in range(len(nodes_df)):
        point = nodes_df.loc[i,nodes_geom]
        shortest_distance = 100000
        for j in range(len(edges_df)):
            line = edges_df.loc[j,edges_geom]
            if line.distance(point) < shortest_distance:
                shortest_distance = line.distance(point)
                closest_street_index = j
                closest_line = line
                ...
Run Code Online (Sandbox Code Playgroud)

然后,将结果保存在表中作为新列,该列将点到线的最短路径添加为新列。

有没有一种方法可以使该功能更快些?

例如,如果我可以为50m左右的每个点过滤出线,这将有助于加快每次迭代的速度?

有没有一种方法可以使用rtree包使其更快?我能够找到一个答案,从而使脚本可以更快地找到多边形的交点,但是我似乎无法使它适用于最接近点到线的地方。

多边形相交的更快方法

https://pypi.python.org/pypi/Rtree/

抱歉,如果已经回答了,但是我在这里也没有在gis.stackexchange上找到答案

谢谢你的建议!

python gis r-tree pandas shapely

4
推荐指数
1
解决办法
2275
查看次数

从旧列修改值的数据框中创建新列的最简单逻辑是什么?

我主要是R用户,但我在某些用例中切换到Python,并且我有非常简单的任务,包括清理值/数据准备.

我有一个数据帧,其值为原始格式并基于值,我想创建一个具有干净值的新列,使用像string.replace()这样的函数

让我们创建一个虚拟表:

import pandas as pd
dummy_table = pd.DataFrame(data = ["London - City", "Manchester - City"], columns = ["City_raw"])

dummy_table
           City_raw
0      London - City
1  Manchester - City
Run Code Online (Sandbox Code Playgroud)

在R中,我将使用一个非常简单和直接的逻辑来创建一个具有修改原始值的新列.

dummy_table$City_clean <- gsub(" - City", "", dummy_table$City_raw)
Run Code Online (Sandbox Code Playgroud)

结果将是:

       City_raw       City_clean
0  London - City      London
1  Manchester - City  Manchester
Run Code Online (Sandbox Code Playgroud)

我想保留两个列,原始和新的修改.我试过在Python中使用这种语法:

dummy_table['City_clean'] = dummy_table['City_raw'].replace(" - City",  "", inplace = False)
Run Code Online (Sandbox Code Playgroud)

但是结果表的新列具有与原始列相同的值,这意味着没有替换完成,只复制值.

       City_raw       City_clean
0  London - City      London - City 
1  Manchester - City  Manchester - City
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有一些简单直接的语法可以对列进行矢量化(对列的所有值进行操作)操作并创建一个新列,或者我是否需要在Python中使用某些应用/ lambda函数? …

python dataframe pandas

2
推荐指数
2
解决办法
73
查看次数

如何从 pandas 中的多列创建排序值列表?

我有一个包含 A 列和 B 列的数据框,它们在排序时可以具有相同的值对。我想对这些列进行重复数据删除,因为我不关心应用程序中的顺序。

这是一个示例数据框:

import pandas as pd
df = pd.DataFrame({'col1':[1, 2, 3], 'col2':[2, 1, 4]})
print(df)
Run Code Online (Sandbox Code Playgroud)

数据框如下所示:

index col1  col2 

0     1     2 

1     2     1 

2     3     4
Run Code Online (Sandbox Code Playgroud)

我想要实现的是创建一个新列,该列将包含每行的前两个值的排序列表,以便我能够根据该列对数据帧进行重复数据删除。

key_column 看起来像这样:

0   [1, 2]

1   [1, 2]

2   [3, 4]
Run Code Online (Sandbox Code Playgroud)

然后我会使用 df.drop_duplicates(col3)

我有一个想法,我应该使用 .apply 或 .map ,也许还有一些 lambda 函数,但到目前为止我尝试过的都不起作用:

df.apply(lambda row: sorted([row[0], row[1]]), axis=1) # this sorts the column values in place but doesn't create a new column with a list
sorted([df['col1'], df['col2']]) # returns error …
Run Code Online (Sandbox Code Playgroud)

python lambda dataframe pandas

0
推荐指数
1
解决办法
1096
查看次数