小编Ker*_*ael的帖子

使用Spark加载CSV文件

我是Spark的新手,我正在尝试使用Spark从文件中读取CSV数据.这就是我在做的事情:

sc.textFile('file.csv')
    .map(lambda line: (line.split(',')[0], line.split(',')[1]))
    .collect()
Run Code Online (Sandbox Code Playgroud)

我希望这个调用能给我一个我文件的两个第一列的列表,但是我收到了这个错误:

File "<ipython-input-60-73ea98550983>", line 1, in <lambda>
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

虽然我的CSV文件不止一列.

python csv apache-spark pyspark

95
推荐指数
10
解决办法
24万
查看次数

Phoenix - 具有多个渲染的控制器

尝试使用Elixir + Phoenix创建一个应用程序,它将能够处理"浏览器"和"api"请求以处理其资源.

是否可以这样做而不必做那样的事情:

scope "/", App do
  pipe_through :browser

  resources "/users", UserController
end

scope "/api", App.API as: :api do
  pipe_through :api

  resources "/users", UserController
end
Run Code Online (Sandbox Code Playgroud)

这意味着必须创建两个控制器,这些控制器可能具有相同的行为,除了它将使用浏览器管道呈现HTML ,例如JSON,用于api管道.

我想的可能就是Rails respond_to do |format| ...

elixir phoenix-framework

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

测试中没有超时

我喜欢在我的测试中使用断点来查看出现了什么问题,但测试中的30秒超时使我无法自由地环顾四周.

有没有办法禁用它?以下不起作用:

@tag timeout: 0
test "something" do 
  assert something == 42
end
Run Code Online (Sandbox Code Playgroud)

elixir

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

Ecto - 验证相关模型的存在

如何验证Ecto中相关模型的存在?

schema "foo" do
  has_many: bar, Bar

  timestamps
end

@required_fields ~w(bar) # invalid
Run Code Online (Sandbox Code Playgroud)

有办法吗?并验证这些字段的最小/最大数量?

elixir ecto phoenix-framework

14
推荐指数
1
解决办法
1686
查看次数

插入具有has_many关联的模型

我有以下型号:

# Foo model
schema "foo" do
  field :name, :string
  has_many: :bars, App.Bar
end

# App model
schema "bar" do
  field :name, :string
  belongs_to: foo, App.Foo
end
Run Code Online (Sandbox Code Playgroud)

这个形式:

# form.html (Foo)
<%= form_for @changeset, @action, fn f -> %>
  <%= text_input f, :name, class: "form-control" %>
  <%= submit "Submit", class: "btn btn-primary" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这里面的形式,我如何添加文本字段来填充我的新FooBars

以下不起作用,因为bars没有预加载:

<%= text_input f, :bars, class: "form-control" %>
Run Code Online (Sandbox Code Playgroud)

我是在正确的轨道上吗?如果是这样,我怎么能Bars在表格中预加载?

更新,控制器:

def new(conn, _params) do
  changeset …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework

13
推荐指数
1
解决办法
4104
查看次数

Elixir - Agent中的随机数字

我正在尝试实现一个像骰子一样的代理:

defmodule Dice do
  @on_load :seed_generator

  def start_link(opts \\ []) do
    Agent.start_link(fn -> [] end, name: __MODULE__)
  end

  def roll(n, val) do
    Agent.cast(__MODULE__, fn(_) ->
      Stream.repeatedly(fn -> :random.uniform(val) end)
      |> Enum.take(n)
    end)
  end

  def seed_generator do
    :random.seed(:erlang.now)
    :ok
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,每次重新启动iex时生成的数字都是相同的.我究竟做错了什么 ?种子不工作,因为 :random.uniform呼叫在代理内部?或者与may相关的东西Stream.

random agent elixir

12
推荐指数
1
解决办法
665
查看次数

大文件和散列 - 性能问题

我正在尝试使用以下代码逐行散列文件(16 MB):

 def hash(data, protocol) do
   :crypto.hash(protocol, data)
   |> Base.encode16()
 end

 File.stream!(path)
 |> Stream.map(&hash(&1, :md5) <> "h")
 |> Enum.to_list()
 |> hd()
 |> IO.puts()
Run Code Online (Sandbox Code Playgroud)

根据time命令,这需要10到12秒,这似乎是一个巨大的数字,我考虑使用以下Python代码:

import md5

with open('a', 'r') as f:
    content = f.readlines()
    l = []
    for _, val in enumerate(content):
        m = md5.new()
        m.update(val)
        l.append(m.hexdigest() + "h")

    print l[0]
Run Code Online (Sandbox Code Playgroud)

time在大约2.3秒内运行(仍然按照).

我将在哪里提高我的Elixir代码的性能?我试图将初始流拆分为10个块,并为每个块启动异步任务:

File.stream!(path)
|> Stream.chunk(chunk_size) # with chunk_size being (nb_of_lines_in_file / 10)
|> Enum.map(fn chunk -> Task.async(fn -> Enum.map(chunk, &hash(&1, :md5) <> "h") end) end)
|> …
Run Code Online (Sandbox Code Playgroud)

elixir

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

伞应用程序中的共享代码

我的伞式应用程序有以下目录结构:

umbrella_app/
    _build/
    apps/
      client/
         config/
         lib/
           client.ex
         test/
       server/
         ...
    config/
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在内部某处编写代码umbrella_app,可以从我的应用程序访问client并且server无需创建另一个子应用程序?

例如 :

# umbrella_app/apps/client/lib/client.ex

defmodule UmbrellaApp.Client do
  UmbrellaApp.some_function()
end
Run Code Online (Sandbox Code Playgroud)

elixir

5
推荐指数
1
解决办法
1337
查看次数

Ransacker 和 Arel 谈关联领域

我有Project::Contribution那个belongs_to User,并且 User has_one User::Profile

first_name并且last_name是包含在中的字段User::Profile

我想创建一个掠夺者,它允许我使用他们的用户个人资料first_namelast_name.

如何才能实现这一目标?

这是我到目前为止所尝试的:

# admin/contribution.rb
filter :user_full_name_cont

# models/user.rb
ransacker :full_name do |parent|
  Arel::Nodes::InfixOperation.new('||', parent.table[:profile_first_name], parent.table[:profile_last_name]) # error
end
Run Code Online (Sandbox Code Playgroud)

这会失败,因为:parent.table[:profile_first_name]并且parent.table[:profile_last_name]因为我无法profile像这样访问该表。

ruby ruby-on-rails arel activeadmin ransack

5
推荐指数
1
解决办法
974
查看次数

在模板中返回一个迭代器

我正在尝试实现一个简单的模板函数,这段代码不能编译,但我希望它会让你知道我正在尝试做什么:

template<typename T>
typename T::iterator   do_find(const T& container, const int val)
{
   return std::find(container.begin(), container.end(), val);
}
Run Code Online (Sandbox Code Playgroud)

我想返回发现自己返回的迭代器,而不知道我在模板函数do_find中收到的容器类型.我究竟做错了什么 ?

这是主要的:

int             main()
{
  std::vector<int>      c;

  c.push_back(42);
  c.push_back(0);
  c.push_back(1);
  c.push_back(-58);
  c.push_back(42);
  c.push_back(777);
  c.push_back(1911);
  c.push_back(9);

  do_find(c, 42);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

而编译错误:

In file included from main.cpp:14:0:
find.hpp: In instantiation of ‘typename T::iterator do_find(const T&, int) [with T = std::vector<int>; typename T::iterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >]’:
main.cpp:29:16:   required from here
find.hpp:17:59: error: could not convert ‘std::find<__gnu_cxx::__normal_iterator<const int*, std::vector<int> >, int>((& container)->std::vector<_Tp, _Alloc>::begin<int, std::allocator<int> …
Run Code Online (Sandbox Code Playgroud)

c++ templates iterator vector typename

3
推荐指数
1
解决办法
361
查看次数