我是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文件不止一列.
尝试使用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| ...
我喜欢在我的测试中使用断点来查看出现了什么问题,但测试中的30秒超时使我无法自由地环顾四周.
有没有办法禁用它?以下不起作用:
@tag timeout: 0
test "something" do
assert something == 42
end
Run Code Online (Sandbox Code Playgroud) 如何验证Ecto中相关模型的存在?
schema "foo" do
has_many: bar, Bar
timestamps
end
@required_fields ~w(bar) # invalid
Run Code Online (Sandbox Code Playgroud)
有办法吗?并验证这些字段的最小/最大数量?
我有以下型号:
# 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)
这里面的形式,我如何添加文本字段来填充我的新Foo
用Bars
?
以下不起作用,因为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) 我正在尝试实现一个像骰子一样的代理:
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
.
我正在尝试使用以下代码逐行散列文件(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) 我的伞式应用程序有以下目录结构:
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) 我有Project::Contribution
那个belongs_to
User
,并且
User
has_one
User::Profile
。
first_name
并且last_name
是包含在中的字段User::Profile
我想创建一个掠夺者,它允许我使用他们的用户个人资料first_name
和last_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
像这样访问该表。
我正在尝试实现一个简单的模板函数,这段代码不能编译,但我希望它会让你知道我正在尝试做什么:
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)